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

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