Difference between revisions of "See if any unit decided to use an ability"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - See if any unit decided to use an ability
See if any unit decided to use an ability <font face='Courier New'>
+
check usefulness of an Ability on All Potential Targets from AI List at 0x8019f3c4 + 0xc78
 
+
------------------------------------------------------------------------------------------
  0019e540: 27bdffd8 addiu r29,r29,0xffd8
+
Parameter : Nothing
  0019e544: afb20018 sw r18,0x0018(r29)
+
Return : r2 = 0x01 if There is at least one Valid Target for this ability
  0019e548: 00009021 addu r18,r0,r0
+
          r2 = 0x00 if no valid Targets
  0019e54c: afb40020 sw r20,0x0020(r29)
+
------------------------------------------------------------------------------------------
  0019e550: 3c14801a lui r20,0x801a
+
0019e540: 27bdffd8 addiu r29,r29,-0x0028    |
  0019e554: 2694f3c4 addiu r20,r20,0xf3c4
+
0019e544: afb20018 sw r18,0x0018(r29)       |
  0019e558: afb00010 sw r16,0x0010(r29)
+
0019e548: 00009021 addu r18,r0,r0           |{{f/std|Initialize Valid Target flag}}
  0019e55c: 00008021 addu r16,r0,r0
+
0019e54c: afb40020 sw r20,0x0020(r29)       |
  0019e560: afb3001c sw r19,0x001c(r29)
+
0019e550: 3c14801a lui r20,0x801a           |
  0019e564: 34130001 ori r19,r0,0x0001
+
0019e554: 2694f3c4 addiu r20,r20,0xf3c4     |{{f/adr|0x8019f3c4}}
  0019e568: afbf0024 sw r31,0x0024(r29)
+
0019e558: afb00010 sw r16,0x0010(r29)       |
  0019e56c: afb10014 sw r17,0x0014(r29)
+
0019e55c: 00008021 addu r16,r0,r0           |{{f/std|Initialize Unit Counter}}
  0019e570: 02908821 addu r17,r20,r16
+
0019e560: afb3001c sw r19,0x001c(r29)       |
   
+
0019e564: 34130001 ori r19,r0,0x0001         |
  0019e574: 92220c8d lbu r2,0x0c8d(r17)
+
0019e568: afbf0024 sw r31,0x0024(r29)       |
  0019e578: 00000000 nop
+
0019e56c: afb10014 sw r17,0x0014(r29)       |
  0019e57c: 10400008 beq r2,r0,0x0019e5a0             branch if unit is not targetable
+
0019e570: 02908821 addu r17,r20,r16         |{{f/std|AI Data + Unit offset (1 byte)}}
  0019e580: 02002021 addu r4,r16,r0
+
                                            {{f/bloop|LOOP - All Units}}
  0019e584: 0c067976 jal 0x0019e5d8
+
  0019e574: 92220c8d lbu r2,0x0c8d(r17)           |{{f/load|This Unit Targetable Flag}} {{f/adr|0x8019f3c4 + 0xcd8 + Unit offset}}
  0019e588: 34050001 ori r5,r0,0x0001
+
0019e578: 00000000 nop                           |
  0019e58c: 14530003 bne r2,r19,0x0019e59c           branch if result failed
+
0019e57c: 10400008 beq r2,r0,0x0019e5a0         {{f/Cond|if unit is not an elligible Taget branch to}} {{f/loc|Next Unit}}
  0019e590: 00000000 nop
+
0019e580: 02002021 addu r4,r16,r0                   |
  0019e594: 08067968 j 0x0019e5a0                     Jump to end
+
0019e584: 0c067976 jal 0x0019e5d8               |{{f/jal|AI_Ability_Use_Decisions|AI_Ability_Use_Decisions}}
  0019e598: 34120001 ori r18,r0,0x0001               return success
+
0019e588: 34050001 ori r5,r0,0x0001             |{{f/std|Bypass reflect}}
   
+
0019e58c: 14530003 bne r2,r19,0x0019e59c         {{f/Cond|If Ability is usable or usefull on this Target}}
  0019e59c: a2200c8d sb r0,0x0c8d(r17)
+
0019e590: 00000000 nop                               |
  0019e5a0: 26100001 addiu r16,r16,0x0001
+
0019e594: 08067968 j 0x0019e5a0                     {{f/jump|Keep Unit in Potential Target List }}
  0019e5a4: 2a020015 slti r2,r16,0x0015
+
0019e598: 34120001 ori r18,r0,0x0001                 |{{f/std|Enable Valid target flag}}
  0019e5a8: 1440fff2 bne r2,r0,0x0019e574             do for each unit
+
                                                  '''Else : Ability could/should not be used on this Target'''
  0019e5ac: 02908821 addu r17,r20,r16
+
  0019e59c: a2200c8d sb r0,0x0c8d(r17)                 |{{f/store|Disable Unit in potential target list}}
   
+
0019e5a0: 26100001 addiu r16,r16,0x0001         |{{f/std|Unit Counter + 1}}
  0019e5b0: 02401021 addu r2,r18,r0                   r2 = 1 if any unit found
+
0019e5a4: 2a020015 slti r2,r16,0x0015           |
  0019e5b4: 8fbf0024 lw r31,0x0024(r29)
+
0019e5a8: 1440fff2 bne r2,r0,0x0019e574     {{f/eloop|do for each unit}}
  0019e5b8: 8fb40020 lw r20,0x0020(r29)
+
0019e5ac: 02908821 addu r17,r20,r16             |{{f/std|Apply unit offset on AI pointer}}
  0019e5bc: 8fb3001c lw r19,0x001c(r29)
+
  0019e5b0: 02401021 addu r2,r18,r0           |{{f/std|<nowiki>r2 = 1 if any unit found</nowiki>}}
  0019e5c0: 8fb20018 lw r18,0x0018(r29)
+
0019e5b4: 8fbf0024 lw r31,0x0024(r29)
  0019e5c4: 8fb10014 lw r17,0x0014(r29)
+
0019e5b8: 8fb40020 lw r20,0x0020(r29)
  0019e5c8: 8fb00010 lw r16,0x0010(r29)
+
0019e5bc: 8fb3001c lw r19,0x001c(r29)
  0019e5cc: 27bd0028 addiu r29,r29,0x0028
+
0019e5c0: 8fb20018 lw r18,0x0018(r29)
  0019e5d0: 03e00008 jr r31
+
0019e5c4: 8fb10014 lw r17,0x0014(r29)
  0019e5d4: 00000000 nop
+
0019e5c8: 8fb00010 lw r16,0x0010(r29)
  </font></font>
+
0019e5cc: 27bd0028 addiu r29,r29,0x0028
 +
0019e5d0: 03e00008 jr r31
 +
0019e5d4: 00000000 nop
 +
===Return locations===
 +
  '''BATTLE.BIN'''
 +
  0019b08c: [[AI_ability_use_control_routine]]
 +
  0019b0dc: [[AI_ability_use_control_routine]]
 +
  0019bdf4: [[Math_Skill_Targeting]]

Latest revision as of 15:34, 24 April 2024

BATTLE.BIN :  - See if any unit decided to use an ability
check usefulness of an Ability on All Potential Targets from AI List at 0x8019f3c4 + 0xc78
------------------------------------------------------------------------------------------
Parameter : Nothing
Return : r2 = 0x01 if There is at least one Valid Target for this ability
         r2 = 0x00 if no valid Targets
------------------------------------------------------------------------------------------
0019e540: 27bdffd8 addiu r29,r29,-0x0028     |
0019e544: afb20018 sw r18,0x0018(r29)        |
0019e548: 00009021 addu r18,r0,r0            |Initialize Valid Target flag
0019e54c: afb40020 sw r20,0x0020(r29)        |
0019e550: 3c14801a lui r20,0x801a            |
0019e554: 2694f3c4 addiu r20,r20,0xf3c4      |0x8019f3c4
0019e558: afb00010 sw r16,0x0010(r29)        |
0019e55c: 00008021 addu r16,r0,r0            |Initialize Unit Counter
0019e560: afb3001c sw r19,0x001c(r29)        |
0019e564: 34130001 ori r19,r0,0x0001         |
0019e568: afbf0024 sw r31,0x0024(r29)        |
0019e56c: afb10014 sw r17,0x0014(r29)        |
0019e570: 02908821 addu r17,r20,r16          |AI Data + Unit offset (1 byte)
                                            @LOOP - All Units
0019e574: 92220c8d lbu r2,0x0c8d(r17)            |This Unit Targetable Flag 0x8019f3c4 + 0xcd8 + Unit offset
0019e578: 00000000 nop                           |
0019e57c: 10400008 beq r2,r0,0x0019e5a0          #if unit is not an elligible Taget branch to Next Unit
0019e580: 02002021 addu r4,r16,r0                    |
0019e584: 0c067976 jal 0x0019e5d8                |-->AI_Ability_Use_Decisions
0019e588: 34050001 ori r5,r0,0x0001              |Bypass reflect
0019e58c: 14530003 bne r2,r19,0x0019e59c         #If Ability is usable or usefull on this Target
0019e590: 00000000 nop                               |
0019e594: 08067968 j 0x0019e5a0                      >>Keep Unit in Potential Target List 
0019e598: 34120001 ori r18,r0,0x0001                 |Enable Valid target flag
                                                 Else : Ability could/should not be used on this Target
0019e59c: a2200c8d sb r0,0x0c8d(r17)                 |Disable Unit in potential target list
0019e5a0: 26100001 addiu r16,r16,0x0001          |Unit Counter + 1
0019e5a4: 2a020015 slti r2,r16,0x0015            |
0019e5a8: 1440fff2 bne r2,r0,0x0019e574      Λ do for each unit
0019e5ac: 02908821 addu r17,r20,r16              |Apply unit offset on AI pointer
0019e5b0: 02401021 addu r2,r18,r0            |r2 = 1 if any unit found
0019e5b4: 8fbf0024 lw r31,0x0024(r29)
0019e5b8: 8fb40020 lw r20,0x0020(r29)
0019e5bc: 8fb3001c lw r19,0x001c(r29)
0019e5c0: 8fb20018 lw r18,0x0018(r29)
0019e5c4: 8fb10014 lw r17,0x0014(r29)
0019e5c8: 8fb00010 lw r16,0x0010(r29)
0019e5cc: 27bd0028 addiu r29,r29,0x0028
0019e5d0: 03e00008 jr r31
0019e5d4: 00000000 nop

Return locations

BATTLE.BIN
 0019b08c: AI_ability_use_control_routine
 0019b0dc: AI_ability_use_control_routine
 0019bdf4: Math_Skill_Targeting