Difference between revisions of "Attack Preparation"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(A few notes on the Katana Inventory section)
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
+
'''BATTLE.BIN''' :  - Attack_Preparation
  Set Attack CT and action taken, also set CT for AT list preview
+
------------------------------------------------------------------------------------------
  r21 = Misc Unit Data or Unit data depending on function
+
Parameter : r4 : Pointer to Data in Battle 0x16e formating (see return location section) - AI , Battle or Misc
  r20 = Function determination
+
            r5 = Pointer to Data in Battle 0x16e formating (see return location section)
     0x00 - ability selected
+
            r6 = Preset Value (0x00 Ability Selected ? / 0x01 AT List Preview / 0x0d mimic Ability ? Unconfirmed)
     0x01 - AT list preview
+
  Return : r2 = 0x01 if Ability CT = 0x00
     0x0d - mimic ability setting
+
          r2 = 0x00 if Ability CT > 0x00
 +
          r2 = -0x01 if Invalid data
 +
------------------------------------------------------------------------------------------
 +
0017c45c: 27bdffb0 addiu r29,r29,-0x0050    |{{f/std|addiu r29,r29,-0x0050}}
 +
0017c460: afb5003c sw r21,0x003c(r29)        |
 +
  0017c464: 00a0a821 addu r21,r5,r0            |{{f/std|Preserve 801908cc + 0x16e Pointer}}
 +
0017c468: afb40038 sw r20,0x0038(r29)        |
 +
0017c46c: 00c0a021 addu r20,r6,r0            |{{f/std|Preserves Preset Value}}
 +
0017c470: 27a50010 addiu r5,r29,0x0010      |{{f/adr|Stack Pointer + 0x10}}
 +
0017c474: afbf0048 sw r31,0x0048(r29)        |
 +
0017c478: afb70044 sw r23,0x0044(r29)        |
 +
0017c47c: afb60040 sw r22,0x0040(r29)        |
 +
0017c480: afb30034 sw r19,0x0034(r29)        |
 +
0017c484: afb20030 sw r18,0x0030(r29)        |
 +
0017c488: afb1002c sw r17,0x002c(r29)        |
 +
0017c48c: 0c01788b jal 0x0005e22c            |{{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}} {{f/std| From r4 to r5}}
 +
0017c490: afb00028 sw r16,0x0028(r29)        |
 +
0017c494: 93a30010 lbu r3,0x0010(r29)        |{{f/load|Acting Unit ID}}
 +
0017c498: 00000000 nop                      |
 +
0017c49c: 2c620015 sltiu r2,r3,0x0015        |
 +
0017c4a0: 104000dd beq r2,r0,0x0017c818      {{f/Cond|If Unit ID is invalid}} {{f/loc|Exit}} {{f/Returns|Returns -0x01}}
 +
0017c4a4: 000310c0 sll r2,r3,0x03            |
 +
0017c4a8: 00431023 subu r2,r2,r3            |
 +
0017c4ac: 00021180 sll r2,r2,0x06            |{{f/std|Unit offset (Unit ID * 0x1c0)}}
 +
0017c4b0: 3c038019 lui r3,0x8019            |
 +
0017c4b4: 246308cc addiu r3,r3,0x08cc        |
 +
0017c4b8: 00439821 addu r19,r2,r3            |{{f/adr|Considered Unit Battle data pointer}} {{f/std|Always acting unit ?}}
 +
0017c4bc: 92620001 lbu r2,0x0001(r19)        |{{f/load|load unit ID}}
 +
  0017c4c0: 340400ff ori r4,r0,0x00ff          |
 +
0017c4c4: 104400d4 beq r2,r4,0x0017c818     {{f/Cond|If considered Unit doesn't exists}} {{f/loc|Exit}} {{f/Returns|Returns -0x01}}
 +
0017c4c8: 34020006 ori r2,r0,0x0006          |
 +
0017c4cc: 93a3001a lbu r3,0x001a(r29)        |{{f/load|Load r4 pointer + 0x0a}} {{f/std|Could be 6 if Target Map}}
 +
0017c4d0: 00000000 nop                      |
 +
0017c4d4: 1462000e bne r3,r2,0x0017c510     {{f/Cond|<nowiki>If r4 0x0a = 0x06 ( Ability has [Target Map] ? )</nowiki>}} {{f/std| Set to 0x06 if Target Map / labeled as Target-specific in wiki}}
 +
0017c4d8: 0000b021 addu r22,r0,r0                |
 +
0017c4dc: 93a3001b lbu r3,0x001b(r29)            |{{f/load|load Target ID ?}}
 +
0017c4e0: 00000000 nop                          |
 +
0017c4e4: 2c620015 sltiu r2,r3,0x0015            |
 +
0017c4e8: 104000cb beq r2,r0,0x0017c818          {{f/Cond|If Unit ID is invalid}} {{f/loc|Exit}} {{f/Returns|Returns -0x01}}
 +
0017c4ec: 000310c0 sll r2,r3,0x03                |
 +
0017c4f0: 00431023 subu r2,r2,r3                |
 +
0017c4f4: 00021180 sll r2,r2,0x06                |{{f/std|ID * 0x1c0}}
 +
0017c4f8: 3c018019 lui r1,0x8019                |
 +
0017c4fc: 00220821 addu r1,r1,r2                |
 +
0017c500: 902208cd lbu r2,0x08cd(r1)            |{{f/load|This Unit Battle ID}} {{f/adr|801908cc + 0x01 + Unit offset}}
 +
0017c504: 00000000 nop                          |
 +
0017c508: 104400f4 beq r2,r4,0x0017c8dc          {{f/Cond|If considered Unit doesn't exists}} {{f/loc|Exit}} {{f/Returns|Returns -0x01}}
 +
0017c50c: 2402ffff addiu r2,r0,-0x0001          |
 +
0017c510: 93a20011 lbu r2,0x0011(r29)        |{{f/load|Considered Ability's skillset}}
 +
0017c514: 3c018006 lui r1,0x8006            |
 +
0017c518: 00220821 addu r1,r1,r2            |
 +
0017c51c: 90235cb4 lbu r3,0x5cb4(r1)        |{{f/load|Considered Ability's Action Menu}} {{f/adr|80065cb4 + Skillset offset (Byte)}}
 +
0017c520: 00000000 nop                      |
 +
0017c524: 2c62000d sltiu r2,r3,0x000d        |{{f/std|set if less than 0d}}
 +
0017c528: 104000bb beq r2,r0,0x0017c818     {{f/Cond|If Action Menu is Unknwon or Blank}} {{f/loc|Exit}} {{f/Returns|Returns -0x01}}
 +
0017c52c: 00031080 sll r2,r3,0x02            |{{f/std|Action Menu Offset (word)}}
 +
0017c530: 3c018017 lui r1,0x8017            |
 +
0017c534: 00220821 addu r1,r1,r2            |
 +
0017c538: 8c2240e8 lw r2,0x40e8(r1)          |{{f/adr|Load return address based on action menu byte}}
 +
0017c53c: 00000000 nop                      |
 +
0017c540: 00400008 jr r2                    {{f/jump|jump to dedicated section}}  [[#17c45c_Notes|See Notes]]
 +
0017c544: 00000000 nop
 
   
 
   
  0017c45c: 27bdffb0 addiu r29,r29,0xffb0
+
  {{f/sec|Item Inventory}}
  0017c460: afb5003c sw r21,0x003c(r29)
+
  0017c548: 93b10018 lbu r17,0x0018(r29)       load used item ID
  0017c464: 00a0a821 addu r21,r5,r0
+
  0017c54c: 00000000 nop
  0017c468: afb40038 sw r20,0x0038(r29)
+
0017c550: 323200ff andi r18,r17,0x00ff
  0017c46c: 00c0a021 addu r20,r6,r0
+
  0017c554: 00121040 sll r2,r18,0x01          item ID*2
  0017c470: 27a50010 addiu r5,r29,0x0010
+
  0017c558: 00521021 addu r2,r2,r18            item ID*2 + Item ID
  0017c474: afbf0048 sw r31,0x0048(r29)
+
  0017c55c: 00021080 sll r2,r2,0x02            (item ID*2 + Item ID)*4
  0017c478: afb70044 sw r23,0x0044(r29)
+
  0017c560: 3c018006 lui r1,0x8006
  0017c47c: afb60040 sw r22,0x0040(r29)
+
  0017c564: 00220821 addu r1,r1,r2
  0017c480: afb30034 sw r19,0x0034(r29)
+
  0017c568: 90232ebd lbu r3,0x2ebd(r1)         load item type
  0017c484: afb20030 sw r18,0x0030(r29)
+
  0017c56c: 34020022 ori r2,r0,0x0022
0017c488: afb1002c sw r17,0x002c(r29)
+
  0017c570: 146200da bne r3,r2,0x0017c8dc      skip to end if used item is not an item. not necessary?
  0017c48c: 0c01788b jal 0x0005e22c Transfer target ID routine
+
  0017c574: 2402ffff addiu r2,r0,0xffff        r2 = -1
  0017c490: afb00028 sw r16,0x0028(r29)
+
  0017c578: 27a40010 addiu r4,r29,0x0010
  0017c494: 93a30010 lbu r3,0x0010(r29) load target ID
+
  0017c57c: 0c01788b jal 0x0005e22c            {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
0017c498: 00000000 nop
+
  0017c580: 02a02821 addu r5,r21,r0           r5 = 0x182 in unit data (mount data)
0017c49c: 2c620015 sltiu r2,r3,0x0015 set on less than 20 (party?)
+
  0017c584: 26300080 addiu r16,r17,0x0080      r16 = used ability ID
  0017c4a0: 104000dd beq r2,r0,0x 0017c818 jump to writes action taken if not in party
+
  0017c588: 12800067 beq r20,r0,0x0017c728    branch if r20 is 0
  0017c4a4: 000310c0 sll r2,r3,0x03
+
0017c58c: a6b00002 sh r16,0x0002(r21)        store used ability ID
  0017c4a8: 00431023 subu r2,r2,r3
+
  0017c590: 32820001 andi r2,r20,0x0001
  0017c4ac: 00021180 sll r2,r2,0x06
+
  0017c594: 10400064 beq r2,r0,0x0017c728      branch if r20 is not 01
  0017c4b0: 3c038019 lui r3,0x8019
+
  0017c598: 02602021 addu r4,r19,r0            r4 = unit data
0017c4b4: 246308cc addiu r3,r3,0x08cc
+
  0017c59c: 02402821 addu r5,r18,r0            r5 = used item ID
  0017c4b8: 00439821 addu r19,r2,r3 r19 = unit data
+
  0017c5a0: 0c05f255 jal 0x0017c954            {{f/jal|Player_Item_Quantity_decrement|Player_Item_Quantity_decrement}}
  0017c4bc: 92620001 lbu r2,0x0001(r19) load unit ID
+
0017c5a4: 34060001 ori r6,r0,0x0001          input value = 01
  0017c4c0: 340400ff ori r4,r0,0x00ff
+
  0017c5a8: 34020001 ori r2,r0,0x0001
  0017c4c4: 104400d4 beq r2,r4,0x 0017c818 branch if unitID doesn't exist
+
  0017c5ac: 0805f1ca j 0x0017c728              jump to write action taken, return r2=01
  0017c4c8: 34020006 ori r2,r0,0x0006
+
  0017c5b0: a2620188 sb r2,0x0188(r19)         store action taken
  0017c4cc: 93a3001a lbu r3,0x001a(r29) load 0x17c in unit data?
+
   
  0017c4d0: 00000000 nop
+
  {{f/sec| Weapon Inventory}}
  0017c4d4: 1462000e bne r3,r2,0x 0017c510 branch if 0x17c in unit data isn't 0x06?
+
  0017c5b4: 3410017e ori r16,r0,0x017e
  0017c4d8: 0000b021 addu r22,r0,r0
+
  0017c5b8: 93b10018 lbu r17,0x0018(r29)  
  0017c4dc: 93a3001b lbu r3,0x001b(r29) load Target ID
+
  0017c5bc: 3c048006 lui r4,0x8006
  0017c4e0: 00000000 nop
+
  0017c5c0: 24840ea2 addiu r4,r4,0x0ea2        load ability data 2 (@ ability 0x170)
  0017c4e4: 2c620015 sltiu r2,r3,0x0015
+
  0017c5c4: 00111040 sll r2,r17,0x01
  0017c4e8: 104000cb beq r2,r0,0x 0017c818 branch if unit not in party
+
  0017c5c8: 00511021 addu r2,r2,r17
  0017c4ec: 000310c0 sll r2,r3,0x03
+
  0017c5cc: 00021080 sll r2,r2,0x02
0017c4f0: 00431023 subu r2,r2,r3
+
  0017c5d0: 3c018006 lui r1,0x8006
  0017c4f4: 00021180 sll r2,r2,0x06
+
  0017c5d4: 00220821 addu r1,r1,r2  
  0017c4f8: 3c018019 lui r1,0x8019
+
  0017c5d8: 90232ebd lbu r3,0x2ebd(r1)         load item type?
  0017c4fc: 00220821 addu r1,r1,r2
+
  0017c5dc: 00101400 sll r2,r16,0x10
  0017c500: 902208cd lbu r2,0x08cd(r1) load party ID?
+
  0017c5e0: 00021403 sra r2,r2,0x10
  0017c504: 00000000 nop
+
  0017c5e4: 00441021 addu r2,r2,r4
  0017c508: 104400f4 beq r2,r4,0x 0017c8dc branch if party ID != 0xff?
+
  0017c5e8: 90420000 lbu r2,0x0000(r2)  
  0017c50c: 2402ffff addiu r2,r0,0xffff r2 - 1
+
  0017c5ec: 00000000 nop
  0017c510: 93a20011 lbu r2,0x0011(r29) load skillset of last attack
+
  0017c5f0: 10430007 beq r2,r3,0x0017c610
  0017c514: 3c018006 lui r1,0x8006
+
  0017c5f4: 26020001 addiu r2,r16,0x0001
  0017c518: 00220821 addu r1,r1,r2
+
  0017c5f8: 00408021 addu r16,r2,r0
  0017c51c: 90235cb4 lbu r3,0x5cb4(r1) action menu bytes
+
  0017c5fc: 00021400 sll r2,r2,0x10
  0017c520: 00000000 nop
+
  0017c600: 00021403 sra r2,r2,0x10
  0017c524: 2c62000d sltiu r2,r3,0x000d set if less than 0d
+
  0017c604: 2842018a slti r2,r2,0x018a
  0017c528: 104000bb beq r2,r0,0x 0017c818 branch if not
+
  0017c608: 1440fff5 bne r2,r0,0x0017c5e0
  0017c52c: 00031080 sll r2,r3,0x02
+
  0017c60c: 00101400 sll r2,r16,0x10
  0017c530: 3c018017 lui r1,0x8017
+
0017c610: 00101400 sll r2,r16,0x10
  0017c534: 00220821 addu r1,r1,r2
+
  0017c614: 00021403 sra r2,r2,0x10
  0017c538: 8c2240e8 lw r2,0x40e8(r1) load return address based on action menu byte
+
  0017c618: 3403018a ori r3,r0,0x018a
  0017c53c: 00000000 nop
+
  0017c61c: 1043007e beq r2,r3,0x0017c818
  0017c540: 00400008 jr r2 jump to return address
+
  0017c620: 27a40010 addiu r4,r29,0x0010
  0017c544: 00000000 nop
+
  0017c624: 0c01788b jal 0x0005e22c            {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
 
+
  0017c628: 02a02821 addu r5,r21,r0
  Item Inventory
+
  0017c62c: 1280003e beq r20,r0,0x0017c728
0017c548: 93b10018 lbu r17,0x0018(r29) load used item ID
+
  0017c630: a6b00002 sh r16,0x0002(r21)
  0017c54c: 00000000 nop
+
  0017c634: 32820001 andi r2,r20,0x0001
  0017c550: 323200ff andi r18,r17,0x00ff
+
  0017c638: 1040003b beq r2,r0,0x0017c728
  0017c554: 00121040 sll r2,r18,0x01 item ID*2
+
  0017c63c: 02602021 addu r4,r19,r0
  0017c558: 00521021 addu r2,r2,r18 item ID*2 + Item ID
+
  0017c640: 02202821 addu r5,r17,r0
  0017c55c: 00021080 sll r2,r2,0x02 (item ID*2 + Item ID)*4
+
  0017c644: 0c05f255 jal 0x0017c954            {{f/jal|Player_Item_Quantity_decrement|Player_Item_Quantity_decrement}}
  0017c560: 3c018006 lui r1,0x8006
+
  0017c648: 34060001 ori r6,r0,0x0001
  0017c564: 00220821 addu r1,r1,r2
+
  0017c64c: 34020001 ori r2,r0,0x0001
  0017c568: 90232ebd lbu r3,0x2ebd(r1) load item type
+
  0017c650: 0805f1ca j 0x0017c728
  0017c56c: 34020022 ori r2,r0,0x0022
+
0017c654: a2620188 sb r2,0x0188(r19)
  0017c570: 146200da bne r3,r2,0x 0017c8dc skip to end if used item is not an item. not necessary?
+
  0017c574: 2402ffff addiu r2,r0,0xffff r2 = -1
+
{{f/sec|Math Skill}}
  0017c578: 27a40010 addiu r4,r29,0x0010
+
  0017c658: 3404fe62 ori r4,r0,0xfe62
  0017c57c: 0c01788b jal 0x0005e22c transfer target ID
+
  0017c65c: 97b00012 lhu r16,0x0012(r29)
  0017c580: 02a02821 addu r5,r21,r0 r5 = 0x182 in unit data (mount data)
+
  0017c660: 97a20014 lhu r2,0x0014(r29)  
  0017c584: 26300080 addiu r16,r17,0x0080 r16 = used ability ID
+
  0017c664: 97a30016 lhu r3,0x0016(r29)
  0017c588: 12800067 beq r20,r0,0x 0017c728 branch if r20 is 0
+
  0017c668: 00441021 addu r2,r2,r4            r2 - 19e
  0017c58c: a6b00002 sh r16,0x0002(r21) store used ability ID
+
  0017c66c: 3042ffff andi r2,r2,0xffff
  0017c590: 32820001 andi r2,r20,0x0001
+
  0017c670: 2c420008 sltiu r2,r2,0x0008
  0017c594: 10400064 beq r2,r0,0x 0017c728 branch if r20 is not 01
+
  0017c674: 10400068 beq r2,r0,0x0017c818      branch if not using a math skill ability
  0017c598: 02602021 addu r4,r19,r0 r4 = unit data
+
  0017c678: 00641021 addu r2,r3,r4  
  0017c59c: 02402821 addu r5,r18,r0 r5 = used item ID
+
  0017c67c: 3042ffff andi r2,r2,0xffff
  0017c5a0: 0c05f255 jal 0x 0017c954 jump to decrement item quantity
+
  0017c680: 2c420008 sltiu r2,r2,0x0008
0017c5a4: 34060001 ori r6,r0,0x0001 input value = 01
+
  0017c684: 10400064 beq r2,r0,0x0017c818      same check for 2nd parameter?
  0017c5a8: 34020001 ori r2,r0,0x0001
+
  0017c688: 3202ffff andi r2,r16,0xffff
  0017c5ac: 0805f1ca j 0x 0017c728 jump to write action taken, return r2=01
+
  0017c68c: 2c420170 sltiu r2,r2,0x0170
  0017c5b0: a2620188 sb r2,0x0188(r19) store action taken
+
  0017c690: 10400061 beq r2,r0,0x0017c818      check if 3rd parameter is an active ability
 
+
  0017c694: 27a40010 addiu r4,r29,0x0010
  Weapon Inventory
+
  0017c698: 0c01788b jal 0x0005e22c            {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
0017c5b4: 341 0017e ori r16,r0,0x017e
+
  0017c69c: 02a02821 addu r5,r21,r0
  0017c5b8: 93b10018 lbu r17,0x0018(r29)
+
  0017c6a0: 12800021 beq r20,r0,0x0017c728
  0017c5bc: 3c048006 lui r4,0x8006
+
  0017c6a4: 32820001 andi r2,r20,0x0001
  0017c5c0: 24840ea2 addiu r4,r4,0x0ea2 load ability data 2 (@ ability 0x170)
+
  0017c6a8: 1040001f beq r2,r0,0x0017c728
  0017c5c4: 00111040 sll r2,r17,0x01
+
  0017c6ac: 34020001 ori r2,r0,0x0001
  0017c5c8: 00511021 addu r2,r2,r17
+
  0017c6b0: 0805f1ca j 0x0017c728
  0017c5cc: 00021080 sll r2,r2,0x02
+
  0017c6b4: a2620188 sb r2,0x0188(r19)  
  0017c5d0: 3c018006 lui r1,0x8006
+
   
  0017c5d4: 00220821 addu r1,r1,r2
+
  {{f/sec|Elements}}
  0017c5d8: 90232ebd lbu r3,0x2ebd(r1) load item type?
+
0017c6b8: 0c05fcb6 jal 0x0017f2d8
  0017c5dc: 00101400 sll r2,r16,0x10
+
  0017c6bc: 02602021 addu r4,r19,r0
  0017c5e0: 00021403 sra r2,r2,0x10
+
0017c6c0: 0805f1ff j 0x0017c7fc
  0017c5e4: 00441021 addu r2,r2,r4
+
  0017c6c4: a7a20012 sh r2,0x0012(r29)  
  0017c5e8: 90420000 lbu r2,0x0000(r2)
+
   
  0017c5ec: 00000000 nop
+
{{f/sec|Katana Inventory}}
  0017c5f0: 10430007 beq r2,r3,0x 0017c610
+
0017c6c8: 93b10018 lbu r17,0x0018(r29)
  0017c5f4: 26020001 addiu r2,r16,0x0001
+
  0017c6cc: 00000000 nop
  0017c5f8: 00408021 addu r16,r2,r0
+
  0017c6d0: 2622ffda addiu r2,r17,0xffda      r2 = r17 - 26 (Asura Knife's ID in Items)
  0017c5fc: 00021400 sll r2,r2,0x10
+
  0017c6d4: 2c42000a sltiu r2,r2,0x000a        r2 = 0x01 if 26-2F (katanas)
  0017c600: 00021403 sra r2,r2,0x10
+
  0017c6d8: 1040004f beq r2,r0,0x0017c818      Branch if not a katana
  0017c604: 2842018a slti r2,r2,0x018a
+
  0017c6dc: 26300026 addiu r16,r17,0x0026
  0017c608: 1440fff5 bne r2,r0,0x 0017c5e0
+
  0017c6e0: 32820001 andi r2,r20,0x0001
  0017c60c: 00101400 sll r2,r16,0x10
+
  0017c6e4: 10400045 beq r2,r0,0x0017c7fc      Branch if Preset Value isn't 1 (not the actual action?)
<----1---->
+
  0017c6e8: a7b00012 sh r16,0x0012(r29)
  0017c610: 00101400 sll r2,r16,0x10
+
  0017c6ec: 02602021 addu r4,r19,r0
  0017c614: 00021403 sra r2,r2,0x10
+
  0017c6f0: 02202821 addu r5,r17,r0
  0017c618: 3403018a ori r3,r0,0x018a
+
0017c6f4: 0c05f255 jal 0x0017c954            {{f/jal|Player_Item_Quantity_decrement|Player_Item_Quantity_decrement}}
  0017c61c: 1043007e beq r2,r3,0x 0017c818
+
  0017c6f8: 34060001 ori r6,r0,0x0001
  0017c620: 27a40010 addiu r4,r29,0x0010
+
0017c6fc: 0805f1ff j 0x0017c7fc
  0017c624: 0c01788b jal 0x0005e22c transfer target ID
+
  0017c700: 00000000 nop
  0017c628: 02a02821 addu r5,r21,r0
+
  0017c62c: 1280003e beq r20,r0,0x 0017c728
+
{{f/sec|Attack}}
  0017c630: a6b00002 sh r16,0x0002(r21)
+
  0017c704: 27a40010 addiu r4,r29,0x0010  
0017c634: 32820001 andi r2,r20,0x0001
+
  0017c708: 0c01788b jal 0x0005e22c           {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
  0017c638: 1040003b beq r2,r0,0x 0017c728
+
  0017c70c: 02a02821 addu r5,r21,r0  
  0017c63c: 02602021 addu r4,r19,r0
+
  0017c710: 12800004 beq r20,r0,0x0017c724
  0017c640: 02202821 addu r5,r17,r0
+
  0017c714: 32820001 andi r2,r20,0x0001  
  0017c644: 0c05f255 jal 0x 0017c954 item quantity decrement
+
  0017c718: 10400002 beq r2,r0,0x0017c724
  0017c648: 34060001 ori r6,r0,0x0001
+
  0017c71c: 34020001 ori r2,r0,0x0001
  0017c64c: 34020001 ori r2,r0,0x0001
+
  0017c720: a2620188 sb r2,0x0188(r19)
  0017c650: 0805f1ca j 0x 0017c728
+
  0017c724: a6a00002 sh r0,0x0002(r21)        store last attack used?
  0017c654: a2620188 sb r2,0x0188(r19)
+
  0017c728: 0805f237 j 0x0017c8dc
 
+
  0017c72c: 34020001 ori r2,r0,0x0001  
  Math Skill
+
   
0017c658: 3404fe62 ori r4,r0,0xfe62
+
  {{f/sec|Jump}}
  0017c65c: 97b00012 lhu r16,0x0012(r29)
+
  0017c730: 27a40010 addiu r4,r29,0x0010
  0017c660: 97a20014 lhu r2,0x0014(r29)
+
  0017c734: 0c01788b jal 0x0005e22c            {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
  0017c664: 97a30016 lhu r3,0x0016(r29)
+
  0017c738: 02a02821 addu r5,r21,r0
  0017c668: 00441021 addu r2,r2,r4 r2 - 19e
+
  0017c73c: 12800013 beq r20,r0,0x0017c78c
  0017c66c: 3042ffff andi r2,r2,0xffff
+
  0017c740: 34030032 ori r3,r0,0x0032
  0017c670: 2c420008 sltiu r2,r2,0x0008
+
  0017c744: 92620038 lbu r2,0x0038(r19)        load speed
  0017c674: 10400068 beq r2,r0,0x 0017c818 branch if not using a math skill ability
+
0017c748: 00000000 nop
  0017c678: 00641021 addu r2,r3,r4
+
  0017c74c: 0062001a div r3,r2                 0x32 / speed?
  0017c67c: 3042ffff andi r2,r2,0xffff
+
  0017c750: 00001812 mflo r3
  0017c680: 2c420008 sltiu r2,r2,0x0008
+
0017c754: 00000000 nop
  0017c684: 10400064 beq r2,r0,0x 0017c818 same check for 2nd parameter?
+
  0017c758: 00609021 addu r18,r3,r0
  0017c688: 3202ffff andi r2,r16,0xffff
+
  0017c75c: 16400002 bne r18,r0,0x0017c768
0017c68c: 2c420170 sltiu r2,r2,0x0170
+
  0017c760: 02401021 addu r2,r18,r0
  0017c690: 10400061 beq r2,r0,0x 0017c818 check if 3rd parameter is an active ability
+
  0017c764: 34020001 ori r2,r0,0x0001
  0017c694: 27a40010 addiu r4,r29,0x0010
+
  0017c768: a262015d sb r2,0x015d(r19)        store current ability CT
  0017c698: 0c01788b jal 0x0005e22c transfer target data
+
0017c76c: 32820001 andi r2,r20,0x0001
0017c69c: 02a02821 addu r5,r21,r0
+
  0017c770: 10400006 beq r2,r0,0x0017c78c
  0017c6a0: 12800021 beq r20,r0,0x 0017c728
+
  0017c774: 02602021 addu r4,r19,r0
  0017c6a4: 32820001 andi r2,r20,0x0001
+
  0017c778: 34050006 ori r5,r0,0x0006
  0017c6a8: 1040001f beq r2,r0,0x 0017c728
+
  0017c77c: 34020001 ori r2,r0,0x0001
  0017c6ac: 34020001 ori r2,r0,0x0001
+
  0017c780: a0820188 sb r2,0x0188(r4)          Store action taken
  0017c6b0: 0805f1ca j 0x 0017c728
+
  0017c784: 0c0179ea jal 0x0005e7a8            set status flags - jump
  0017c6b4: a2620188 sb r2,0x0188(r19)
+
  0017c788: a0820187 sb r2,0x0187(r4)          store movement taken
 
+
  0017c78c: 3402018a ori r2,r0,0x018a
  Elemental
+
  0017c790: a6a20002 sh r2,0x0002(r21)         store last attack used
  0017c6b8: 0c05fcb6 jal 0x 0017f2d8
+
  0017c794: 0805f237 j 0x0017c8dc
  0017c6bc: 02602021 addu r4,r19,r0
+
  0017c798: 34020003 ori r2,r0,0x0003
  0017c6c0: 0805f1ff j 0x 0017c7fc
+
   
  0017c6c4: a7a20012 sh r2,0x0012(r29)
+
  {{f/sec|Charge}}
 
+
  0017c79c: 97b00012 lhu r16,0x0012(r29)  
  Katana Inventory
+
  0017c7a0: 00000000 nop  
0017c6c8: 93b10018 lbu r17,0x0018(r29)
+
  0017c7a4: 2602fe6a addiu r2,r16,0xfe6a      ability ID - 196
0017c6cc: 00000000 nop
+
  0017c7a8: 2c420008 sltiu r2,r2,0x0008
  0017c6d0: 2622ffda addiu r2,r17,0xffda
+
  0017c7ac: 1040001a beq r2,r0,0x0017c818      check if ability is charge ability
  0017c6d4: 2c42000a sltiu r2,r2,0x000a
+
  0017c7b0: 27a40010 addiu r4,r29,0x0010
  0017c6d8: 1040004f beq r2,r0,0x 0017c818                Branch if ?? not a draw out thing?
+
  0017c7b4: 0c01788b jal 0x0005e22c            {{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}}
  0017c6dc: 26300026 addiu r16,r17,0x0026
+
  0017c7b8: 02a02821 addu r5,r21,r0  
  0017c6e0: 32820001 andi r2,r20,0x0001
+
  0017c7bc: 00101400 sll r2,r16,0x10
  0017c6e4: 10400045 beq r2,r0,0x 0017c7fc                Branch if ???
+
  0017c7c0: 000213c3 sra r2,r2,0x0f
  0017c6e8: a7b00012 sh r16,0x0012(r29)
+
0017c7c4: 3c018006 lui r1,0x8006
  0017c6ec: 02602021 addu r4,r19,r0
+
  0017c7c8: 00220821 addu r1,r1,r2
  0017c6f0: 02202821 addu r5,r17,r0
+
  0017c7cc: 90320d18 lbu r18,0x0d18(r1)        get charges power?
  0017c6f4: 0c05f255 jal 0x 0017c954                      Decrement Item Quantity
+
  0017c7d0: 32820001 andi r2,r20,0x0001  
  0017c6f8: 34060001 ori r6,r0,0x0001
+
  0017c7d4: 10400003 beq r2,r0,0x0017c7e4
  0017c6fc: 0805f1ff j 0x 0017c7fc
+
  0017c7d8: 34160001 ori r22,r0,0x0001
  0017c700: 00000000 nop
+
  0017c7dc: 34020001 ori r2,r0,0x0001
 
+
  0017c7e0: a2620187 sb r2,0x0187(r19)        store movement taken
  Attack
+
  0017c7e4: 0805f1ff j 0x0017c7fc
0017c704: 27a40010 addiu r4,r29,0x0010
+
  0017c7e8: 0000b821 addu r23,r0,r0
  0017c708: 0c01788b jal 0x0005e22c transfer target ID
+
   
  0017c70c: 02a02821 addu r5,r21,r0
+
  {{f/sec|Defend}}
  0017c710: 12800004 beq r20,r0,0x 0017c724
+
0017c7ec: 0805f237 j 0x0017c8dc
  0017c714: 32820001 andi r2,r20,0x0001
+
0017c7f0: 00001021 addu r2,r0,r0
  0017c718: 10400002 beq r2,r0,0x 0017c724
+
  0017c71c: 34020001 ori r2,r0,0x0001
+
{{f/sec|Change Equipment}}
  0017c720: a2620188 sb r2,0x0188(r19)
+
0017c7f4: 0805f237 j 0x0017c8dc
  0017c724: a6a00002 sh r0,0x0002(r21) store last attack used?
+
  0017c7f8: 34020002 ori r2,r0,0x0002
  0017c728: 0805f237 j 0x 0017c8dc
+
   
  0017c72c: 34020001 ori r2,r0,0x0001
+
{{f/sec| Default / Monster / ( end of Katana Inventory / Charge)}}
 
+
  0017c7fc: 16c00020 bne r22,r0,0x0017c880    {{f/Cond|If r22 <> 0x00 }} {{f/loc|Skip CT section}} {{f/std|Keep r22 with his value (instead of setting it to CT)}}
  Jump
+
  0017c800: 00000000 nop                      |
  0017c730: 27a40010 addiu r4,r29,0x0010
+
  0017c804: 97b00012 lhu r16,0x0012(r29)      |{{f/load|Considered Ability ID}}
  0017c734: 0c01788b jal 0x0005e22c transfer target data
+
  0017c808: 00000000 nop                      |
  0017c738: 02a02821 addu r5,r21,r0
+
  0017c80c: 2e020170 sltiu r2,r16,0x0170      |
  0017c73c: 12800013 beq r20,r0,0x 0017c78c
+
0017c810: 14400003 bne r2,r0,0x0017c820      {{f/Cond|If Ability Has a data 2 section }} {{f/loc|Avoid Fail }}
  0017c740: 34030032 ori r3,r0,0x0032
+
0017c814: 27a40010 addiu r4,r29,0x0010       |
  0017c744: 92620038 lbu r2,0x0038(r19) load speed
+
   
0017c748: 00000000 nop
+
  {{f/sec|Fails and Blank action Menu }}
  0017c74c: 0062001a div r3,r2 0x32 / speed?
+
0017c818: 0805f237 j 0x0017c8dc              {{f/jump|Jump to }} {{f/loc|Exit}} {{f/Returns|returns -0x01}}
  0017c750: 00001812 mflo r3
+
  0017c81c: 2402ffff addiu r2,r0,-0x0001      |
  0017c754: 00000000 nop
+
   
  0017c758: 00609021 addu r18,r3,r0
+
  {{f/sec|Load and Check Ability CT}}
  0017c75c: 16400002 bne r18,r0,0x 0017c768
+
0017c820: 0c01788b jal 0x0005e22c            |{{f/jal|Copy_Byte_Data_(20_Bytes)|Copy_Byte_Data_(20_Bytes)}} {{f/std| From r4 (stack data coming from r4 passed pointer )  to r5 (r5 passed pointer)}}
  0017c760: 02401021 addu r2,r18,r0
+
  0017c824: 02a02821 addu r5,r21,r0            |
  0017c764: 34020001 ori r2,r0,0x0001
+
  0017c828: 00101c00 sll r3,r16,0x10          |
  0017c768: a262015d sb r2,0x015d(r19) store current ability CT
+
  0017c82c: 00031c03 sra r3,r3,0x10            |{{f/std|Ability ID}}
  0017c76c: 32820001 andi r2,r20,0x0001
+
  0017c830: 000310c0 sll r2,r3,0x03            |
  0017c770: 10400006 beq r2,r0,0x 0017c78c
+
  0017c834: 00431023 subu r2,r2,r3            |
  0017c774: 02602021 addu r4,r19,r0
+
  0017c838: 00021040 sll r2,r2,0x01            |{{f/std|14}}
  0017c778: 34050006 ori r5,r0,0x0006
+
  0017c83c: 3c038006 lui r3,0x8006            |
  0017c77c: 34020001 ori r2,r0,0x0001
+
  0017c840: 2463fbf0 addiu r3,r3,-0x0410      |
  0017c780: a0820188 sb r2,0x0188(r4)           Store action taken
+
  0017c844: 00431021 addu r2,r2,r3            |{{f/adr|0x8005fbf0 + Ability offset (0xe bytes)}}
  0017c784: 0c0179ea jal 0x0005e7a8 set status flags - jump
+
  0017c848: 9043000c lbu r3,0x000c(r2)        |{{f/load|Ability  CT}}
  0017c788: a0820187 sb r2,0x0187(r4)            store movement taken
+
  0017c84c: 90420005 lbu r2,0x0005(r2)        |{{f/load|load flags 3}}
  0017c78c: 3402018a ori r2,r0,0x018a
+
  0017c850: 3072007f andi r18,r3,0x007f        |{{f/std|<nowiki>r18 = CT as signed?</nowiki>}}
  0017c790: a6a20002 sh r2,0x0002(r21) store last attack used
+
  0017c854: 30570004 andi r23,r2,0x0004        |{{f/std|persevere check}}
  0017c794: 0805f237 j 0x 0017c8dc
+
  0017c858: 92630092 lbu r3,0x0092(r19)       |{{f/load|Acting Unit support 4}}
  0017c798: 34020003 ori r2,r0,0x0003
+
  0017c85c: 16e00008 bne r23,r0,0x0017c880    {{f/Cond|If Ability do NOT have [Persevere]}} {{f/std|aka performing}}
 
+
  0017c860: 30620008 andi r2,r3,0x0008            |
Charge
+
  0017c864: 10400002 beq r2,r0,0x0017c870          {{f/Cond|If Acting Unit uses [Short Charge]}}
  0017c79c: 97b00012 lhu r16,0x0012(r29)
+
  0017c868: 26420001 addiu r2,r18,0x0001              |
0017c7a0: 00000000 nop
+
0017c86c: 00029042 srl r18,r2,0x01                  |{{f/std|CT / 2}}
  0017c7a4: 2602fe6a addiu r2,r16,0xfe6a ability ID - 196
+
  0017c870: 30620004 andi r2,r3,0x0004            |
  0017c7a8: 2c420008 sltiu r2,r2,0x0008
+
  0017c874: 10400002 beq r2,r0,0x0017c880          {{f/Cond|If Acting Unit used [Non Charge]}}
  0017c7ac: 1040001a beq r2,r0,0x 0017c818 check if ability is charge ability
+
  0017c878: 00000000 nop                               |
  0017c7b0: 27a40010 addiu r4,r29,0x0010
+
  0017c87c: 00009021 addu r18,r0,r0                    |{{f/std|<nowiki>CT = 0</nowiki>}}
  0017c7b4: 0c01788b jal 0x0005e22c transfer target ID
+
0017c7b8: 02a02821 addu r5,r21,r0
+
  {{f/sec|Store Ability CT and Action Taken- Set Charging/Performing Status}}
0017c7bc: 00101400 sll r2,r16,0x10
+
  0017c880: 12800014 beq r20,r0,0x0017c8d4    {{f/Cond|<nowiki>If Preset Value (r6) = 0x00</nowiki>}} {{f/loc|Avoid Status section}}
  0017c7c0: 000213c3 sra r2,r2,0x0f
+
  0017c884: 32820001 andi r2,r20,0x0001        |
  0017c7c4: 3c018006 lui r1,0x8006
+
  0017c888: 10400012 beq r2,r0,0x0017c8d4      {{f/Cond|<nowiki>If Preset Value (r6) = 0x01 (or 0x0d ?)</nowiki>}}
  0017c7c8: 00220821 addu r1,r1,r2
+
  0017c88c: a272015d sb r18,0x015d(r19)        |{{f/store|Store current ability CT}}
  0017c7cc: 90320d18 lbu r18,0x0d18(r1) get charges power?
+
  0017c890: 3c028019 lui r2,0x8019                |
  0017c7d0: 32820001 andi r2,r20,0x0001
+
  0017c894: 8c42f5f0 lw r2,-0x0a10(r2)            |{{f/load|Load Type of Action}}
0017c7d4: 10400003 beq r2,r0,0x 0017c7e4
+
  0017c898: 00000000 nop                          |
  0017c7d8: 34160001 ori r22,r0,0x0001
+
0017c89c: 1440000e bne r2,r0,0x0017c8d8          {{f/Cond|If Reaction (<> 0x00) }} {{f/loc|Exit}} {{f/Returns|returns r2 based on CT}}
  0017c7dc: 34020001 ori r2,r0,0x0001
+
  0017c8a0: 324200ff andi r2,r18,0x00ff            |{{f/std|<nowiki>r2 = CT</nowiki>}}
0017c7e0: a2620187 sb r2,0x0187(r19) store movement taken
+
  0017c8a4: 34020001 ori r2,r0,0x0001             |
  0017c7e4: 0805f1ff j 0x 0017c7fc
+
  0017c8a8: a2620188 sb r2,0x0188(r19)             |{{f/store|Store action taken flag}}
  0017c7e8: 0000b821 addu r23,r0,r0
+
  0017c8ac: 324200ff andi r2,r18,0x00ff            |
 
+
  0017c8b0: 10400008 beq r2,r0,0x0017c8d4          {{f/Cond|if CT <> 0x00}}
  Defend
+
  0017c8b4: 32e200ff andi r2,r23,0x00ff                |
0017c7ec: 0805f237 j 0x 0017c8dc
+
  0017c8b8: 10400003 beq r2,r0,0x0017c8c8              {{f/Cond|If Ability has [Persevere]}}
  0017c7f0: 00001021 addu r2,r0,r0
+
  0017c8bc: 02602021 addu r4,r19,r0                    |{{f/std|Prepare Acting Unit Battle data pointer}}
 
+
0017c8c0: 0805f233 j 0x0017c8cc                          |
  Change Equipment
+
  0017c8c4: 34050008 ori r5,r0,0x0008                      |{{f/std|Inflict Performing and remove everything else}}
0017c7f4: 0805f237 j 0x 0017c8dc
+
                                                      '''Else : Not Persevere'''
  0017c7f8: 34020002 ori r2,r0,0x0002
+
  0017c8c8: 34050005 ori r5,r0,0x0005                      |{{f/std|Inflict Charging and remove everything else}}
 
+
  0017c8cc: 0c0179ea jal 0x0005e7a8                    |{{f/jal|Status_infliction/removal%3F|Status_infliction/removal%3F}}
  Default / Monster / Katana Inventory / Charge
+
  0017c8d0: 00000000 nop                               |
  0017c7fc: 16c00020 bne r22,r0,0x 0017c880
+
  0017c8d4: 324200ff andi r2,r18,0x00ff        |{{f/std|<nowiki>r2 = CT</nowiki>}}
  0017c800: 00000000 nop
+
  0017c8d8: 2c420001 sltiu r2,r2,0x0001        |{{f/Returns|<nowiki>0x01 if CT = 0x00 Else 0x00</nowiki>}}
  0017c804: 97b00012 lhu r16,0x0012(r29)                Load used ability
 
  0017c808: 00000000 nop
 
0017c80c: 2e020170 sltiu r2,r16,0x0170
 
0017c810: 14400003 bne r2,r0,0x 0017c820 jump to set ability CT for normal abilities
 
0017c814: 27a40010 addiu r4,r29,0x0010
 
Blank jumps to this address
 
0017c818: 0805f237 j 0x 0017c8dc jump to write action taken
 
0017c81c: 2402ffff addiu r2,r0,0xffff
 
 
 
Sets ability CT from here
 
0017c820: 0c01788b jal 0x0005e22c              tranfser target data
 
0017c824: 02a02821 addu r5,r21,r0
 
0017c828: 00101c00 sll r3,r16,0x10
 
0017c82c: 00031c03 sra r3,r3,0x10
 
0017c830: 000310c0 sll r2,r3,0x03
 
0017c834: 00431023 subu r2,r2,r3
 
0017c838: 00021040 sll r2,r2,0x01
 
0017c83c: 3c038006 lui r3,0x8006
 
0017c840: 2463fbf0 addiu r3,r3,0xfbf0 load ability data
 
0017c844: 00431021 addu r2,r2,r3
 
0017c848: 9043000c lbu r3,0x000c(r2) load CT
 
0017c84c: 90420005 lbu r2,0x0005(r2) load flags 3
 
0017c850: 3072007f andi r18,r3,0x007f r18 = CT as signed?
 
0017c854: 30570004 andi r23,r2,0x0004 persevere check
 
0017c858: 92630092 lbu r3,0x0092(r19) load support 4
 
0017c85c: 16e00008 bne r23,r0,0x 0017c880 branch if persevere checked
 
0017c860: 30620008 andi r2,r3,0x0008
 
0017c864: 10400002 beq r2,r0,0x 0017c870 branch if short charge not equipped
 
0017c868: 26420001 addiu r2,r18,0x0001 CT + 1?
 
0017c86c: 00029042 srl r18,r2,0x01 CT / 2
 
0017c870: 30620004 andi r2,r3,0x0004
 
0017c874: 10400002 beq r2,r0,0x 0017c880 branch if non-charge equipped
 
0017c878: 00000000 nop
 
0017c87c: 00009021 addu r18,r0,r0 CT = 0
 
0017c880: 12800014 beq r20,r0,0x 0017c8d4 control
 
0017c884: 32820001 andi r2,r20,0x0001
 
0017c888: 10400012 beq r2,r0,0x 0017c8d4 control?
 
0017c88c: a272015d sb r18,0x015d(r19) store current ability CT
 
0017c890: 3c028019 lui r2,0x8019
 
0017c894: 8c42f5f0 lw r2,-0x0a10(r2) load reaction check
 
0017c898: 00000000 nop
 
0017c89c: 1440000e bne r2,r0,0x 0017c8d8 branch if reaction exists?
 
0017c8a0: 324200ff andi r2,r18,0x00ff r2 = CT
 
0017c8a4: 34020001 ori r2,r0,0x0001
 
0017c8a8: a2620188 sb r2,0x0188(r19) store action taken
 
0017c8ac: 324200ff andi r2,r18,0x00ff
 
0017c8b0: 10400008 beq r2,r0,0x 0017c8d4
 
0017c8b4: 32e200ff andi r2,r23,0x00ff
 
0017c8b8: 10400003 beq r2,r0,0x 0017c8c8
 
0017c8bc: 02602021 addu r4,r19,r0
 
0017c8c0: 0805f233 j 0x 0017c8cc
 
0017c8c4: 34050008 ori r5,r0,0x0008 set status flags = charging
 
0017c8c8: 34050005 ori r5,r0,0x0005 set status flags = jump and performing?
 
0017c8cc: 0c0179ea jal 0x0005e7a8 set status flags
 
0017c8d0: 00000000 nop
 
0017c8d4: 324200ff andi r2,r18,0x00ff r2 = CT
 
0017c8d8: 2c420001 sltiu r2,r2,0x0001 set if CT = 0
 
 
  0017c8dc: 8fbf0048 lw r31,0x0048(r29)
 
  0017c8dc: 8fbf0048 lw r31,0x0048(r29)
 
  0017c8e0: 8fb70044 lw r23,0x0044(r29)
 
  0017c8e0: 8fb70044 lw r23,0x0044(r29)
Line 333: Line 337:
 
  0017c904: 03e00008 jr r31
 
  0017c904: 03e00008 jr r31
 
  0017c908: 00000000 nop
 
  0017c908: 00000000 nop
=== Return Locations ===
+
===Notes===
  '''Battle.bin '''
+
    RAM    | Rank  | Action Menu        | Jump Address  |  <span id="17c45c_Notes"></span>
  0017c3cc: [[Call Attack Preparation (ability selected)]]
+
-----------|-------|--------------------|---------------|
 +
0x801740e8 | 0x00  | Default            | 0x8017c7fc    |
 +
0x801740ec | 0x01  | Item Inventory    | 0x8017c548    |
 +
0x801740f0 | 0x02  | Weapon Inventory  | 0x8017c5b4    |
 +
0x801740f4 | 0x03  | Arithmeticks      | 0x8017c658    |
 +
0x801740f8 | 0x04  | Elements          | 0x8017c6b8    |
 +
0x801740fc | 0x05  | Blank              | 0x8017c818    |
 +
0x80174100 | 0x06  | Monster            | 0x8017c7fc    |
 +
0x80174104 | 0x07  | Katana Inventory  | 0x8017c6c8    |
 +
0x80174108 | 0x08  | Attack            | 0x8017c704    |
 +
0x8017410c | 0x09  | Jump              | 0x8017c730    |
 +
0x80174110 | 0x0A  | Charge            | 0x8017c79c    |
 +
0x80174114 | 0x0B  | Defend            | 0x8017c7ec    |
 +
0x80174118 | 0x0C  | Change Equipment  | 0x8017c7f4    |
 +
===Return locations===
 +
  '''BATTLE.BIN'''
 +
  0017c3cc: [[Call_Attack_Preparation_(ability_selected)]] r4 Misc Unit 0x15c / r5 Misc Unit 0x15c / r6 = 0x00
 +
  0017c414: [[Call_Attack_Preparation_(AT_list_preview)]]   r4 AI 0x1c        / r5 Battle 0x16e    / r6 = 0x01
 +
  0018f254: [[Mimic_ability_setting]]                      r4 = Stack 0x20    / r5 = Battle 0x16e  / r6 = 0x01

Latest revision as of 22:16, 4 March 2025

BATTLE.BIN :  - Attack_Preparation
------------------------------------------------------------------------------------------
Parameter : r4 : Pointer to Data in Battle 0x16e formating (see return location section) - AI , Battle or Misc
            r5 = Pointer to Data in Battle 0x16e formating (see return location section)
            r6 = Preset Value (0x00 Ability Selected ? / 0x01 AT List Preview / 0x0d mimic Ability ? Unconfirmed) 
Return : r2 = 0x01 if Ability CT = 0x00
         r2 = 0x00 if Ability CT > 0x00
         r2 = -0x01 if Invalid data
------------------------------------------------------------------------------------------
0017c45c: 27bdffb0 addiu r29,r29,-0x0050     |addiu r29,r29,-0x0050
0017c460: afb5003c sw r21,0x003c(r29)        |
0017c464: 00a0a821 addu r21,r5,r0            |Preserve 801908cc + 0x16e Pointer
0017c468: afb40038 sw r20,0x0038(r29)        |
0017c46c: 00c0a021 addu r20,r6,r0            |Preserves Preset Value
0017c470: 27a50010 addiu r5,r29,0x0010       |Stack Pointer + 0x10
0017c474: afbf0048 sw r31,0x0048(r29)        |
0017c478: afb70044 sw r23,0x0044(r29)        |
0017c47c: afb60040 sw r22,0x0040(r29)        |
0017c480: afb30034 sw r19,0x0034(r29)        |
0017c484: afb20030 sw r18,0x0030(r29)        |
0017c488: afb1002c sw r17,0x002c(r29)        |
0017c48c: 0c01788b jal 0x0005e22c            |-->Copy_Byte_Data_(20_Bytes)  From r4 to r5
0017c490: afb00028 sw r16,0x0028(r29)        |
0017c494: 93a30010 lbu r3,0x0010(r29)        |Acting Unit ID
0017c498: 00000000 nop                       |
0017c49c: 2c620015 sltiu r2,r3,0x0015        |
0017c4a0: 104000dd beq r2,r0,0x0017c818      #If Unit ID is invalid Exit Returns -0x01
0017c4a4: 000310c0 sll r2,r3,0x03            |
0017c4a8: 00431023 subu r2,r2,r3             |
0017c4ac: 00021180 sll r2,r2,0x06            |Unit offset (Unit ID * 0x1c0)
0017c4b0: 3c038019 lui r3,0x8019             |
0017c4b4: 246308cc addiu r3,r3,0x08cc        |
0017c4b8: 00439821 addu r19,r2,r3            |Considered Unit Battle data pointer Always acting unit ?
0017c4bc: 92620001 lbu r2,0x0001(r19)        |load unit ID
0017c4c0: 340400ff ori r4,r0,0x00ff          |
0017c4c4: 104400d4 beq r2,r4,0x0017c818      #If considered Unit doesn't exists Exit Returns -0x01
0017c4c8: 34020006 ori r2,r0,0x0006          |
0017c4cc: 93a3001a lbu r3,0x001a(r29)        |Load r4 pointer + 0x0a Could be 6 if Target Map
0017c4d0: 00000000 nop                       |
0017c4d4: 1462000e bne r3,r2,0x0017c510      #If r4 0x0a = 0x06 ( Ability has [Target Map] ? )  Set to 0x06 if Target Map / labeled as Target-specific in wiki
0017c4d8: 0000b021 addu r22,r0,r0                |
0017c4dc: 93a3001b lbu r3,0x001b(r29)            |load Target ID ?
0017c4e0: 00000000 nop                           |
0017c4e4: 2c620015 sltiu r2,r3,0x0015            |
0017c4e8: 104000cb beq r2,r0,0x0017c818          #If Unit ID is invalid Exit Returns -0x01
0017c4ec: 000310c0 sll r2,r3,0x03                |
0017c4f0: 00431023 subu r2,r2,r3                 |
0017c4f4: 00021180 sll r2,r2,0x06                |ID * 0x1c0
0017c4f8: 3c018019 lui r1,0x8019                 |
0017c4fc: 00220821 addu r1,r1,r2                 |
0017c500: 902208cd lbu r2,0x08cd(r1)             |This Unit Battle ID 801908cc + 0x01 + Unit offset
0017c504: 00000000 nop                           |
0017c508: 104400f4 beq r2,r4,0x0017c8dc          #If considered Unit doesn't exists Exit Returns -0x01
0017c50c: 2402ffff addiu r2,r0,-0x0001           |
0017c510: 93a20011 lbu r2,0x0011(r29)        |Considered Ability's skillset
0017c514: 3c018006 lui r1,0x8006             |
0017c518: 00220821 addu r1,r1,r2             |
0017c51c: 90235cb4 lbu r3,0x5cb4(r1)         |Considered Ability's Action Menu 80065cb4 + Skillset offset (Byte)
0017c520: 00000000 nop                       |
0017c524: 2c62000d sltiu r2,r3,0x000d        |set if less than 0d
0017c528: 104000bb beq r2,r0,0x0017c818      #If Action Menu is Unknwon or Blank Exit Returns -0x01
0017c52c: 00031080 sll r2,r3,0x02            |Action Menu Offset (word)
0017c530: 3c018017 lui r1,0x8017             |
0017c534: 00220821 addu r1,r1,r2             |
0017c538: 8c2240e8 lw r2,0x40e8(r1)          |Load return address based on action menu byte
0017c53c: 00000000 nop                       |
0017c540: 00400008 jr r2                     >>jump to dedicated section  See Notes
0017c544: 00000000 nop 

Item Inventory
0017c548: 93b10018 lbu r17,0x0018(r29)       load used item ID
0017c54c: 00000000 nop 
0017c550: 323200ff andi r18,r17,0x00ff 
0017c554: 00121040 sll r2,r18,0x01           item ID*2
0017c558: 00521021 addu r2,r2,r18            item ID*2 + Item ID
0017c55c: 00021080 sll r2,r2,0x02            (item ID*2 + Item ID)*4
0017c560: 3c018006 lui r1,0x8006 
0017c564: 00220821 addu r1,r1,r2 
0017c568: 90232ebd lbu r3,0x2ebd(r1)         load item type
0017c56c: 34020022 ori r2,r0,0x0022 
0017c570: 146200da bne r3,r2,0x0017c8dc      skip to end if used item is not an item. not necessary?
0017c574: 2402ffff addiu r2,r0,0xffff        r2 = -1
0017c578: 27a40010 addiu r4,r29,0x0010 
0017c57c: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c580: 02a02821 addu r5,r21,r0            r5 = 0x182 in unit data (mount data) 
0017c584: 26300080 addiu r16,r17,0x0080      r16 = used ability ID
0017c588: 12800067 beq r20,r0,0x0017c728     branch if r20 is 0
0017c58c: a6b00002 sh r16,0x0002(r21)        store used ability ID
0017c590: 32820001 andi r2,r20,0x0001 
0017c594: 10400064 beq r2,r0,0x0017c728      branch if r20 is not 01
0017c598: 02602021 addu r4,r19,r0            r4 = unit data
0017c59c: 02402821 addu r5,r18,r0            r5 = used item ID
0017c5a0: 0c05f255 jal 0x0017c954            -->Player_Item_Quantity_decrement
0017c5a4: 34060001 ori r6,r0,0x0001          input value = 01
0017c5a8: 34020001 ori r2,r0,0x0001 
0017c5ac: 0805f1ca j 0x0017c728              jump to write action taken, return r2=01
0017c5b0: a2620188 sb r2,0x0188(r19)         store action taken

 Weapon Inventory
0017c5b4: 3410017e ori r16,r0,0x017e 
0017c5b8: 93b10018 lbu r17,0x0018(r29) 
0017c5bc: 3c048006 lui r4,0x8006 
0017c5c0: 24840ea2 addiu r4,r4,0x0ea2        load ability data 2 (@ ability 0x170)
0017c5c4: 00111040 sll r2,r17,0x01 
0017c5c8: 00511021 addu r2,r2,r17 
0017c5cc: 00021080 sll r2,r2,0x02 
0017c5d0: 3c018006 lui r1,0x8006 
0017c5d4: 00220821 addu r1,r1,r2 
0017c5d8: 90232ebd lbu r3,0x2ebd(r1)         load item type?
0017c5dc: 00101400 sll r2,r16,0x10 
0017c5e0: 00021403 sra r2,r2,0x10 
0017c5e4: 00441021 addu r2,r2,r4 
0017c5e8: 90420000 lbu r2,0x0000(r2) 
0017c5ec: 00000000 nop 
0017c5f0: 10430007 beq r2,r3,0x0017c610 
0017c5f4: 26020001 addiu r2,r16,0x0001 
0017c5f8: 00408021 addu r16,r2,r0 
0017c5fc: 00021400 sll r2,r2,0x10 
0017c600: 00021403 sra r2,r2,0x10 
0017c604: 2842018a slti r2,r2,0x018a 
0017c608: 1440fff5 bne r2,r0,0x0017c5e0 
0017c60c: 00101400 sll r2,r16,0x10 
0017c610: 00101400 sll r2,r16,0x10 
0017c614: 00021403 sra r2,r2,0x10 
0017c618: 3403018a ori r3,r0,0x018a 
0017c61c: 1043007e beq r2,r3,0x0017c818 
0017c620: 27a40010 addiu r4,r29,0x0010 
0017c624: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c628: 02a02821 addu r5,r21,r0 
0017c62c: 1280003e beq r20,r0,0x0017c728 
0017c630: a6b00002 sh r16,0x0002(r21) 
0017c634: 32820001 andi r2,r20,0x0001 
0017c638: 1040003b beq r2,r0,0x0017c728 
0017c63c: 02602021 addu r4,r19,r0 
0017c640: 02202821 addu r5,r17,r0 
0017c644: 0c05f255 jal 0x0017c954            -->Player_Item_Quantity_decrement
0017c648: 34060001 ori r6,r0,0x0001 
0017c64c: 34020001 ori r2,r0,0x0001 
0017c650: 0805f1ca j 0x0017c728 
0017c654: a2620188 sb r2,0x0188(r19) 

Math Skill
0017c658: 3404fe62 ori r4,r0,0xfe62 
0017c65c: 97b00012 lhu r16,0x0012(r29) 
0017c660: 97a20014 lhu r2,0x0014(r29) 
0017c664: 97a30016 lhu r3,0x0016(r29) 
0017c668: 00441021 addu r2,r2,r4             r2 - 19e
0017c66c: 3042ffff andi r2,r2,0xffff 
0017c670: 2c420008 sltiu r2,r2,0x0008 
0017c674: 10400068 beq r2,r0,0x0017c818      branch if not using a math skill ability
0017c678: 00641021 addu r2,r3,r4 
0017c67c: 3042ffff andi r2,r2,0xffff 
0017c680: 2c420008 sltiu r2,r2,0x0008 
0017c684: 10400064 beq r2,r0,0x0017c818      same check for 2nd parameter?
0017c688: 3202ffff andi r2,r16,0xffff 
0017c68c: 2c420170 sltiu r2,r2,0x0170 
0017c690: 10400061 beq r2,r0,0x0017c818      check if 3rd parameter is an active ability
0017c694: 27a40010 addiu r4,r29,0x0010 
0017c698: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c69c: 02a02821 addu r5,r21,r0 
0017c6a0: 12800021 beq r20,r0,0x0017c728 
0017c6a4: 32820001 andi r2,r20,0x0001 
0017c6a8: 1040001f beq r2,r0,0x0017c728 
0017c6ac: 34020001 ori r2,r0,0x0001 
0017c6b0: 0805f1ca j 0x0017c728 
0017c6b4: a2620188 sb r2,0x0188(r19) 

Elements
0017c6b8: 0c05fcb6 jal 0x0017f2d8 
0017c6bc: 02602021 addu r4,r19,r0 
0017c6c0: 0805f1ff j 0x0017c7fc 
0017c6c4: a7a20012 sh r2,0x0012(r29) 

Katana Inventory
0017c6c8: 93b10018 lbu r17,0x0018(r29) 
0017c6cc: 00000000 nop 
0017c6d0: 2622ffda addiu r2,r17,0xffda       r2 = r17 - 26 (Asura Knife's ID in Items)
0017c6d4: 2c42000a sltiu r2,r2,0x000a        r2 = 0x01 if 26-2F (katanas)
0017c6d8: 1040004f beq r2,r0,0x0017c818      Branch if not a katana
0017c6dc: 26300026 addiu r16,r17,0x0026 
0017c6e0: 32820001 andi r2,r20,0x0001 
0017c6e4: 10400045 beq r2,r0,0x0017c7fc      Branch if Preset Value isn't 1 (not the actual action?)
0017c6e8: a7b00012 sh r16,0x0012(r29) 
0017c6ec: 02602021 addu r4,r19,r0 
0017c6f0: 02202821 addu r5,r17,r0 
0017c6f4: 0c05f255 jal 0x0017c954            -->Player_Item_Quantity_decrement
0017c6f8: 34060001 ori r6,r0,0x0001 
0017c6fc: 0805f1ff j 0x0017c7fc 
0017c700: 00000000 nop 

Attack
0017c704: 27a40010 addiu r4,r29,0x0010 
0017c708: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c70c: 02a02821 addu r5,r21,r0 
0017c710: 12800004 beq r20,r0,0x0017c724 
0017c714: 32820001 andi r2,r20,0x0001 
0017c718: 10400002 beq r2,r0,0x0017c724 
0017c71c: 34020001 ori r2,r0,0x0001 
0017c720: a2620188 sb r2,0x0188(r19) 
0017c724: a6a00002 sh r0,0x0002(r21)         store last attack used?
0017c728: 0805f237 j 0x0017c8dc 
0017c72c: 34020001 ori r2,r0,0x0001 

Jump
0017c730: 27a40010 addiu r4,r29,0x0010 
0017c734: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c738: 02a02821 addu r5,r21,r0 
0017c73c: 12800013 beq r20,r0,0x0017c78c 
0017c740: 34030032 ori r3,r0,0x0032 
0017c744: 92620038 lbu r2,0x0038(r19)        load speed
0017c748: 00000000 nop 
0017c74c: 0062001a div r3,r2                 0x32 / speed?
0017c750: 00001812 mflo r3 
0017c754: 00000000 nop 
0017c758: 00609021 addu r18,r3,r0 
0017c75c: 16400002 bne r18,r0,0x0017c768 
0017c760: 02401021 addu r2,r18,r0 
0017c764: 34020001 ori r2,r0,0x0001 
0017c768: a262015d sb r2,0x015d(r19)         store current ability CT
0017c76c: 32820001 andi r2,r20,0x0001 
0017c770: 10400006 beq r2,r0,0x0017c78c 
0017c774: 02602021 addu r4,r19,r0 
0017c778: 34050006 ori r5,r0,0x0006 
0017c77c: 34020001 ori r2,r0,0x0001 
0017c780: a0820188 sb r2,0x0188(r4)          Store action taken
0017c784: 0c0179ea jal 0x0005e7a8            set status flags - jump
0017c788: a0820187 sb r2,0x0187(r4)          store movement taken
0017c78c: 3402018a ori r2,r0,0x018a 
0017c790: a6a20002 sh r2,0x0002(r21)         store last attack used
0017c794: 0805f237 j 0x0017c8dc 
0017c798: 34020003 ori r2,r0,0x0003 

Charge
0017c79c: 97b00012 lhu r16,0x0012(r29) 
0017c7a0: 00000000 nop 
0017c7a4: 2602fe6a addiu r2,r16,0xfe6a       ability ID - 196
0017c7a8: 2c420008 sltiu r2,r2,0x0008 
0017c7ac: 1040001a beq r2,r0,0x0017c818      check if ability is charge ability
0017c7b0: 27a40010 addiu r4,r29,0x0010 
0017c7b4: 0c01788b jal 0x0005e22c            -->Copy_Byte_Data_(20_Bytes)
0017c7b8: 02a02821 addu r5,r21,r0 
0017c7bc: 00101400 sll r2,r16,0x10 
0017c7c0: 000213c3 sra r2,r2,0x0f 
0017c7c4: 3c018006 lui r1,0x8006 
0017c7c8: 00220821 addu r1,r1,r2 
0017c7cc: 90320d18 lbu r18,0x0d18(r1)        get charges power?
0017c7d0: 32820001 andi r2,r20,0x0001 
0017c7d4: 10400003 beq r2,r0,0x0017c7e4 
0017c7d8: 34160001 ori r22,r0,0x0001 
0017c7dc: 34020001 ori r2,r0,0x0001 
0017c7e0: a2620187 sb r2,0x0187(r19)         store movement taken
0017c7e4: 0805f1ff j 0x0017c7fc 
0017c7e8: 0000b821 addu r23,r0,r0 

Defend
0017c7ec: 0805f237 j 0x0017c8dc 
0017c7f0: 00001021 addu r2,r0,r0 

Change Equipment
0017c7f4: 0805f237 j 0x0017c8dc 
0017c7f8: 34020002 ori r2,r0,0x0002 

 Default / Monster / ( end of Katana Inventory / Charge)
0017c7fc: 16c00020 bne r22,r0,0x0017c880     #If r22 <> 0x00  Skip CT section Keep r22 with his value (instead of setting it to CT)
0017c800: 00000000 nop                       |
0017c804: 97b00012 lhu r16,0x0012(r29)       |Considered Ability ID
0017c808: 00000000 nop                       |
0017c80c: 2e020170 sltiu r2,r16,0x0170       |
0017c810: 14400003 bne r2,r0,0x0017c820      #If Ability Has a data 2 section  Avoid Fail 
0017c814: 27a40010 addiu r4,r29,0x0010       |

Fails and Blank action Menu 
0017c818: 0805f237 j 0x0017c8dc              >>Jump to  Exit returns -0x01
0017c81c: 2402ffff addiu r2,r0,-0x0001       |

Load and Check Ability CT
0017c820: 0c01788b jal 0x0005e22c            |-->Copy_Byte_Data_(20_Bytes)  From r4 (stack data coming from r4 passed pointer )  to r5 (r5 passed pointer)
0017c824: 02a02821 addu r5,r21,r0            |
0017c828: 00101c00 sll r3,r16,0x10           |
0017c82c: 00031c03 sra r3,r3,0x10            |Ability ID
0017c830: 000310c0 sll r2,r3,0x03            |
0017c834: 00431023 subu r2,r2,r3             |
0017c838: 00021040 sll r2,r2,0x01            |14
0017c83c: 3c038006 lui r3,0x8006             |
0017c840: 2463fbf0 addiu r3,r3,-0x0410       |
0017c844: 00431021 addu r2,r2,r3             |0x8005fbf0 + Ability offset (0xe bytes)
0017c848: 9043000c lbu r3,0x000c(r2)         |Ability  CT
0017c84c: 90420005 lbu r2,0x0005(r2)         |load flags 3
0017c850: 3072007f andi r18,r3,0x007f        |r18 = CT as signed?
0017c854: 30570004 andi r23,r2,0x0004        |persevere check
0017c858: 92630092 lbu r3,0x0092(r19)        |Acting Unit support 4
0017c85c: 16e00008 bne r23,r0,0x0017c880     #If Ability do NOT have [Persevere] aka performing
0017c860: 30620008 andi r2,r3,0x0008             |
0017c864: 10400002 beq r2,r0,0x0017c870          #If Acting Unit uses [Short Charge]
0017c868: 26420001 addiu r2,r18,0x0001               |
0017c86c: 00029042 srl r18,r2,0x01                   |CT / 2
0017c870: 30620004 andi r2,r3,0x0004             |
0017c874: 10400002 beq r2,r0,0x0017c880          #If Acting Unit used [Non Charge]
0017c878: 00000000 nop                               |
0017c87c: 00009021 addu r18,r0,r0                    |CT = 0

Store Ability CT and Action Taken- Set Charging/Performing Status
0017c880: 12800014 beq r20,r0,0x0017c8d4     #If Preset Value (r6) = 0x00 Avoid Status section
0017c884: 32820001 andi r2,r20,0x0001        |
0017c888: 10400012 beq r2,r0,0x0017c8d4      #If Preset Value (r6) = 0x01 (or 0x0d ?)
0017c88c: a272015d sb r18,0x015d(r19)        |Store current ability CT
0017c890: 3c028019 lui r2,0x8019                 |
0017c894: 8c42f5f0 lw r2,-0x0a10(r2)             |Load Type of Action
0017c898: 00000000 nop                           |
0017c89c: 1440000e bne r2,r0,0x0017c8d8          #If Reaction (<> 0x00)  Exit returns r2 based on CT
0017c8a0: 324200ff andi r2,r18,0x00ff            |r2 = CT
0017c8a4: 34020001 ori r2,r0,0x0001              |
0017c8a8: a2620188 sb r2,0x0188(r19)             |Store action taken flag
0017c8ac: 324200ff andi r2,r18,0x00ff            |
0017c8b0: 10400008 beq r2,r0,0x0017c8d4          #if CT <> 0x00
0017c8b4: 32e200ff andi r2,r23,0x00ff                |
0017c8b8: 10400003 beq r2,r0,0x0017c8c8              #If Ability has [Persevere]
0017c8bc: 02602021 addu r4,r19,r0                    |Prepare Acting Unit Battle data pointer
0017c8c0: 0805f233 j 0x0017c8cc                          |
0017c8c4: 34050008 ori r5,r0,0x0008                      |Inflict Performing and remove everything else
                                                     Else : Not Persevere
0017c8c8: 34050005 ori r5,r0,0x0005                      |Inflict Charging and remove everything else
0017c8cc: 0c0179ea jal 0x0005e7a8                    |-->Status_infliction/removal%3F
0017c8d0: 00000000 nop                               |
0017c8d4: 324200ff andi r2,r18,0x00ff        |r2 = CT
0017c8d8: 2c420001 sltiu r2,r2,0x0001        |0x01 if CT = 0x00 Else 0x00
0017c8dc: 8fbf0048 lw r31,0x0048(r29)
0017c8e0: 8fb70044 lw r23,0x0044(r29)
0017c8e4: 8fb60040 lw r22,0x0040(r29)
0017c8e8: 8fb5003c lw r21,0x003c(r29)
0017c8ec: 8fb40038 lw r20,0x0038(r29)
0017c8f0: 8fb30034 lw r19,0x0034(r29)
0017c8f4: 8fb20030 lw r18,0x0030(r29)
0017c8f8: 8fb1002c lw r17,0x002c(r29)
0017c8fc: 8fb00028 lw r16,0x0028(r29)
0017c900: 27bd0050 addiu r29,r29,0x0050
0017c904: 03e00008 jr r31
0017c908: 00000000 nop

Notes

    RAM    | Rank  | Action Menu        | Jump Address  |   
-----------|-------|--------------------|---------------|
0x801740e8 | 0x00  | Default            | 0x8017c7fc    |
0x801740ec | 0x01  | Item Inventory     | 0x8017c548    |
0x801740f0 | 0x02  | Weapon Inventory   | 0x8017c5b4    |
0x801740f4 | 0x03  | Arithmeticks       | 0x8017c658    |
0x801740f8 | 0x04  | Elements           | 0x8017c6b8    |
0x801740fc | 0x05  | Blank              | 0x8017c818    |
0x80174100 | 0x06  | Monster            | 0x8017c7fc    |
0x80174104 | 0x07  | Katana Inventory   | 0x8017c6c8    |
0x80174108 | 0x08  | Attack             | 0x8017c704    |
0x8017410c | 0x09  | Jump               | 0x8017c730    |
0x80174110 | 0x0A  | Charge             | 0x8017c79c    |
0x80174114 | 0x0B  | Defend             | 0x8017c7ec    |
0x80174118 | 0x0C  | Change Equipment   | 0x8017c7f4    |

Return locations

BATTLE.BIN
 0017c3cc: Call_Attack_Preparation_(ability_selected)  r4 Misc Unit 0x15c / r5 Misc Unit 0x15c / r6 = 0x00
 0017c414: Call_Attack_Preparation_(AT_list_preview)   r4 AI 0x1c         / r5 Battle 0x16e    / r6 = 0x01
 0018f254: Mimic_ability_setting                       r4 = Stack 0x20    / r5 = Battle 0x16e  / r6 = 0x01