Difference between revisions of "Set unit untargetable based on 19f0d8 routine"

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''' :  -
Set unit untargetable based on 19f0d8 routine <font face='Courier New'>
+
May disable some Enemy Unit in AI 0xc8d List (potential Targets). Disabled if will act before the end of a harmfull ability CT.
 
+
------------------------------------------------------------------------------------------
  0019f01c: 27bdffd8 addiu r29,r29,0xffd8
+
Parameter : Nothing
  0019f020: afb3001c sw r19,0x001c(r29)
+
Return : r2 = if there is at least one potentiel Target in List
  0019f024: 00009821 addu r19,r0,r0
+
          r2 = 0x00 if no Target left
  0019f028: afb00010 sw r16,0x0010(r29)
+
------------------------------------------------------------------------------------------
  0019f02c: 00008021 addu r16,r0,r0
+
0019f01c: 27bdffd8 addiu r29,r29,-0x0028    |
  0019f030: afb40020 sw r20,0x0020(r29)
+
0019f020: afb3001c sw r19,0x001c(r29)       |
  0019f034: 3c14801a lui r20,0x801a
+
0019f024: 00009821 addu r19,r0,r0           |{{f/std|Initialize [found a Target] flag}}
  0019f038: 2694f3c4 addiu r20,r20,0xf3c4
+
0019f028: afb00010 sw r16,0x0010(r29)       |
  0019f03c: afb20018 sw r18,0x0018(r29)
+
0019f02c: 00008021 addu r16,r0,r0           |{{f/std|Initialize Unit counter}}
  0019f040: 02809021 addu r18,r20,r0
+
0019f030: afb40020 sw r20,0x0020(r29)       |
  0019f044: afbf0024 sw r31,0x0024(r29)
+
0019f034: 3c14801a lui r20,0x801a           |
  0019f048: afb10014 sw r17,0x0014(r29)
+
0019f038: 2694f3c4 addiu r20,r20,-0x0c3c    |{{f/adr|0x8019f3c4}}
  0019f04c: 02908821 addu r17,r20,r16
+
0019f03c: afb20018 sw r18,0x0018(r29)       |
  0019f050: 92220c8d lbu r2,0x0c8d(r17)               load targetable unit list
+
0019f040: 02809021 addu r18,r20,r0           |{{f/adr|Prepare dynamic AI pointer}}
  0019f054: 00000000 nop
+
0019f044: afbf0024 sw r31,0x0024(r29)       |
  0019f058: 10400011 beq r2,r0,0x0019f0a0             branch if unit is not targetable
+
0019f048: afb10014 sw r17,0x0014(r29)       |
  0019f05c: 00000000 nop
+
                                            {{f/bloop|LOOP - through all units}}
  0019f060: 8e82000c lw r2,0x000c(r20)               load AI ability flags
+
0019f04c: 02908821 addu r17,r20,r16             |{{f/adr|Dynamic pointer to AI data (8019f3c4 + 1 byte per iteration)}}
  0019f064: 00000000 nop
+
0019f050: 92220c8d lbu r2,0x0c8d(r17)           |{{f/load|This Unit Targetable flag}} {{f/std|From 0x8019f3c4 + 0x0c8d}}
  0019f068: 30420002 andi r2,r2,0x0002
+
0019f054: 00000000 nop                           |
  0019f06c: 1040000b beq r2,r0,0x0019f09c             branch if not target enemies
+
0019f058: 10400011 beq r2,r0,0x0019f0a0         {{f/Cond|If This Unit is not a potential Target : branch to}} {{f/loc|Next Unit}}
  0019f070: 00000000 nop
+
0019f05c: 00000000 nop                           |
  0019f074: 92421834 lbu r2,0x1834(r18)               load enemy flag
+
0019f060: 8e82000c lw r2,0x000c(r20)             |{{f/load|Considered Ability AI behavior flags 1 to 4}}
  0019f078: 00000000 nop
+
0019f064: 00000000 nop                           |
  0019f07c: 10400007 beq r2,r0,0x0019f09c             branch if ally
+
0019f068: 30420002 andi r2,r2,0x0002             |
  0019f080: 00000000 nop
+
0019f06c: 1040000b beq r2,r0,0x0019f09c         {{f/Cond|If considered Ability has [Target Enemies]}}
  0019f084: 0c067c36 jal 0x0019f0d8
+
0019f070: 00000000 nop                               |
  0019f088: 02002021 addu r4,r16,r0
+
0019f074: 92421834 lbu r2,0x1834(r18)               |{{f/load|This Unit Enemy flag}} {{f/adr|8019f3c4 + 0x182c + 0x08 + Unit offset}}
  0019f08c: 10400003 beq r2,r0,0x0019f09c
+
0019f078: 00000000 nop                               |
  0019f090: 00000000 nop
+
0019f07c: 10400007 beq r2,r0,0x0019f09c             {{f/Cond|If This Unit is an Enemy}}
  0019f094: 08067c28 j 0x0019f0a0
+
0019f080: 00000000 nop                                   |
  0019f098: a2200c8d sb r0,0x0c8d(r17)                 store unit untargetable
+
0019f084: 0c067c36 jal 0x0019f0d8                       |{{f/jal|See_if_ability_should_be_used_based_on_CT|See_if_ability_should_be_used_based_on_CT}} {{f/std|returns 0x00 if Ability CT ends before Unit next active turn}}
  0019f09c: 34130001 ori r19,r0,0x0001
+
0019f088: 02002021 addu r4,r16,r0                       |{{f/std|Send Unit ID}}
  0019f0a0: 26100001 addiu r16,r16,0x0001
+
0019f08c: 10400003 beq r2,r0,0x0019f09c                 {{f/Cond|If Ability won't  Hit the unit before his next turn}}
  0019f0a4: 2a020015 slti r2,r16,0x0015
+
0019f090: 00000000 nop                                       |
  0019f0a8: 1440ffe8 bne r2,r0,0x0019f04c             do for all units
+
0019f094: 08067c28 j 0x0019f0a0                             |{{f/loc|Next Unit}}
  0019f0ac: 26520010 addiu r18,r18,0x0010
+
0019f098: a2200c8d sb r0,0x0c8d(r17)                         |{{f/store|Disable Unit in Potential Targets list}}
  0019f0b0: 02601021 addu r2,r19,r0                   r2 = 1 if any unit is targetable
+
                                                  '''Else : Considered ability do not have [Target Enemies] / This Unit is an Ally / Enemy won't act before Ability CT end'''
  0019f0b4: 8fbf0024 lw r31,0x0024(r29)
+
0019f09c: 34130001 ori r19,r0,0x0001                 |{{f/std|Enable found a Targetflag}}
  0019f0b8: 8fb40020 lw r20,0x0020(r29)
+
0019f0a0: 26100001 addiu r16,r16,0x0001         |{{f/std|Unit counter + 1}}
  0019f0bc: 8fb3001c lw r19,0x001c(r29)
+
0019f0a4: 2a020015 slti r2,r16,0x0015           |
  0019f0c0: 8fb20018 lw r18,0x0018(r29)
+
0019f0a8: 1440ffe8 bne r2,r0,0x0019f04c     {{f/eloop|do for all units}}
  0019f0c4: 8fb10014 lw r17,0x0014(r29)
+
0019f0ac: 26520010 addiu r18,r18,0x0010         |{{f/adr|Dynamic pointer to AI data (8019f3c4 + 0x10 byte per iteration)}} {{f/std| Used for Data at AI 0x182c}}
  0019f0c8: 8fb00010 lw r16,0x0010(r29)
+
0019f0b0: 02601021 addu r2,r19,r0           |{{f/std|<nowiki>r2 = 1 if any unit is targetable</nowiki>}}
  0019f0cc: 27bd0028 addiu r29,r29,0x0028
+
0019f0b4: 8fbf0024 lw r31,0x0024(r29)
  0019f0d0: 03e00008 jr r31
+
0019f0b8: 8fb40020 lw r20,0x0020(r29)
  0019f0d4: 00000000 nop
+
0019f0bc: 8fb3001c lw r19,0x001c(r29)
  </font></font>
+
0019f0c0: 8fb20018 lw r18,0x0018(r29)
 +
0019f0c4: 8fb10014 lw r17,0x0014(r29)
 +
0019f0c8: 8fb00010 lw r16,0x0010(r29)
 +
0019f0cc: 27bd0028 addiu r29,r29,0x0028
 +
0019f0d0: 03e00008 jr r31
 +
0019f0d4: 00000000 nop
 +
===Return locations===
 +
  '''BATTLE.BIN'''
 +
  0019b290: [[AI_ability_use_control_routine]]

Latest revision as of 19:13, 1 May 2024

BATTLE.BIN :  - 
May disable some Enemy Unit in AI 0xc8d List (potential Targets). Disabled if will act before the end of a harmfull ability CT.
------------------------------------------------------------------------------------------
Parameter : Nothing
Return : r2 = if there is at least one potentiel Target in List
         r2 = 0x00 if no Target left
------------------------------------------------------------------------------------------
0019f01c: 27bdffd8 addiu r29,r29,-0x0028     |
0019f020: afb3001c sw r19,0x001c(r29)        |
0019f024: 00009821 addu r19,r0,r0            |Initialize [found a Target] flag
0019f028: afb00010 sw r16,0x0010(r29)        |
0019f02c: 00008021 addu r16,r0,r0            |Initialize Unit counter
0019f030: afb40020 sw r20,0x0020(r29)        |
0019f034: 3c14801a lui r20,0x801a            |
0019f038: 2694f3c4 addiu r20,r20,-0x0c3c     |0x8019f3c4
0019f03c: afb20018 sw r18,0x0018(r29)        |
0019f040: 02809021 addu r18,r20,r0           |Prepare dynamic AI pointer
0019f044: afbf0024 sw r31,0x0024(r29)        |
0019f048: afb10014 sw r17,0x0014(r29)        |
                                            @LOOP - through all units
0019f04c: 02908821 addu r17,r20,r16              |Dynamic pointer to AI data (8019f3c4 + 1 byte per iteration)
0019f050: 92220c8d lbu r2,0x0c8d(r17)            |This Unit Targetable flag From 0x8019f3c4 + 0x0c8d
0019f054: 00000000 nop                           |
0019f058: 10400011 beq r2,r0,0x0019f0a0          #If This Unit is not a potential Target : branch to Next Unit
0019f05c: 00000000 nop                           |
0019f060: 8e82000c lw r2,0x000c(r20)             |Considered Ability AI behavior flags 1 to 4
0019f064: 00000000 nop                           |
0019f068: 30420002 andi r2,r2,0x0002             |
0019f06c: 1040000b beq r2,r0,0x0019f09c          #If considered Ability has [Target Enemies]
0019f070: 00000000 nop                               |
0019f074: 92421834 lbu r2,0x1834(r18)                |This Unit Enemy flag 8019f3c4 + 0x182c + 0x08 + Unit offset
0019f078: 00000000 nop                               |
0019f07c: 10400007 beq r2,r0,0x0019f09c              #If This Unit is an Enemy
0019f080: 00000000 nop                                   |
0019f084: 0c067c36 jal 0x0019f0d8                        |-->See_if_ability_should_be_used_based_on_CT returns 0x00 if Ability CT ends before Unit next active turn
0019f088: 02002021 addu r4,r16,r0                        |Send Unit ID
0019f08c: 10400003 beq r2,r0,0x0019f09c                  #If Ability won't  Hit the unit before his next turn
0019f090: 00000000 nop                                       |
0019f094: 08067c28 j 0x0019f0a0                              |Next Unit
0019f098: a2200c8d sb r0,0x0c8d(r17)                         |Disable Unit in Potential Targets list
                                                 Else : Considered ability do not have [Target Enemies] / This Unit is an Ally / Enemy won't act before Ability CT end
0019f09c: 34130001 ori r19,r0,0x0001                 |Enable found a Targetflag
0019f0a0: 26100001 addiu r16,r16,0x0001          |Unit counter + 1
0019f0a4: 2a020015 slti r2,r16,0x0015            |
0019f0a8: 1440ffe8 bne r2,r0,0x0019f04c      Λ do for all units
0019f0ac: 26520010 addiu r18,r18,0x0010          |Dynamic pointer to AI data (8019f3c4 + 0x10 byte per iteration)  Used for Data at AI 0x182c
0019f0b0: 02601021 addu r2,r19,r0            |r2 = 1 if any unit is targetable
0019f0b4: 8fbf0024 lw r31,0x0024(r29)
0019f0b8: 8fb40020 lw r20,0x0020(r29)
0019f0bc: 8fb3001c lw r19,0x001c(r29)
0019f0c0: 8fb20018 lw r18,0x0018(r29)
0019f0c4: 8fb10014 lw r17,0x0014(r29)
0019f0c8: 8fb00010 lw r16,0x0010(r29)
0019f0cc: 27bd0028 addiu r29,r29,0x0028
0019f0d0: 03e00008 jr r31
0019f0d4: 00000000 nop

Return locations

BATTLE.BIN
 0019b290: AI_ability_use_control_routine