Difference between revisions of "Set Highest Target Priority (00196e20)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Uploaded the correct routine)
 
Line 1: Line 1:
  Set Highest Target Priority
+
  '''BATTLE.BIN''' :  - Set_Highest_Target_Priority_(00196e20)
 
+
------------------------------------------------------------------------------------------
  00196e20: 27bdffe0 addiu r29,r29,0xffe0
+
Parameter : r4 = AI 0x0014
  00196e24: afb00010 sw r16,0x0010(r29)
+
            r5 = AI 0x0034
  00196e28: 00808021 addu r16,r4,r0 r16 = AI Data Pointer (0x0034 byte)
+
Return : r2 = 0x01 if Higher score or Safer Tile if same score
  00196e2c: afb10014 sw r17,0x0014(r29)
+
          r2 = 0x00 if not
  00196e30: 00a08821 addu r17,r5,r0 r17 = AI Data Pointer (0x0014 byte)
+
------------------------------------------------------------------------------------------
  00196e34: 2604001c addiu r4,r16,0x001c 0x0050 byte
+
  00196e20: 27bdffe0 addiu r29,r29,-0x0020    |
  00196e38: 2625001c addiu r5,r17,0x001c 0x0030 byte
+
  00196e24: afb00010 sw r16,0x0010(r29)       |
  00196e3c: afbf001c sw r31,0x001c(r29)
+
  00196e28: 00808021 addu r16,r4,r0           |{{f/std|<nowiki>r16 = Pointer to AI 0x0014 </nowiki>}}
  00196e40: 0c065b6c jal 0x00196db0 Compare Unit Target Priority and Hit Rate
+
  00196e2c: afb10014 sw r17,0x0014(r29)       |
  00196e44: afb20018 sw r18,0x0018(r29)
+
  00196e30: 00a08821 addu r17,r5,r0           |{{f/std|<nowiki>r17 = Pointer to AI 0x0034</nowiki>}}
  00196e48: 3c12801a lui r18,0x801a
+
  00196e34: 2604001c addiu r4,r16,0x001c       |{{f/std|Pointer to AI 0x0030}}
  00196e4c: 2652f3c4 addiu r18,r18,0xf3c4
+
  00196e38: 2625001c addiu r5,r17,0x001c       |{{f/std|Pointer to AI 0x0050}}
  00196e50: 00402021 addu r4,r2,r0
+
  00196e3c: afbf001c sw r31,0x001c(r29)       |
  00196e54: 34020002 ori r2,r0,0x0002
+
  00196e40: 0c065b6c jal 0x00196db0           |{{f/jal|Compare Target Priority and Hit Rate (00196db0)|Compare Target Priority and Hit Rate (00196db0)}}
  00196e58: 14820003 bne r4,r2,0x00196e68 Branch if Priority is higher or equal to the highest
+
  00196e44: afb20018 sw r18,0x0018(r29)       |
  00196e5c: 34030001 ori r3,r0,0x0001
+
  00196e48: 3c12801a lui r18,0x801a           |
  00196e60: 08065bb6 j 0x00196ed8 Exit and return 1
+
  00196e4c: 2652f3c4 addiu r18,r18,-0x0c3c    |{{f/adr|0x80193fc4}}
  00196e64: 34020001 ori r2,r0,0x0001
+
  00196e50: 00402021 addu r4,r2,r0             |
 
+
  00196e54: 34020002 ori r2,r0,0x0002         |
  00196e68: 1483001b bne r4,r3,0x00196ed8 Exit and return 0 if equal to the highest Priority
+
  00196e58: 14820003 bne r4,r2,0x00196e68     {{f/Cond|If returned value is 0x02}} {{f/std| Higher priority score, higher Hit%, higher AI 0x30}}
  00196e6c: 00001021 addu r2,r0,r0
+
  00196e5c: 34030001 ori r3,r0,0x0001             |
 
+
  00196e60: 08065bb6 j 0x00196ed8                 |{{f/loc|Exit}} {{f/Returns|Return 0x01}}
  00196e70: 92030005 lbu r3,0x0005(r16)
+
  00196e64: 34020001 ori r2,r0,0x0001             |
  00196e74: 92040006 lbu r4,0x0006(r16)
+
  00196e68: 1483001b bne r4,r3,0x00196ed8     {{f/Cond|if returned value is 0x00}} {{f/loc|Exit}} {{f/Returns|Return 0x00}} {{f/std|lower in everything}}
  00196e78: 92250004 lbu r5,0x0004(r17)
+
  00196e6c: 00001021 addu r2,r0,r0             |
  00196e7c: 000310c0 sll r2,r3,0x03 ? * 8
+
                                              '''Else : returned value is 0x01 (Strict equality)'''
  00196e80: 00431021 addu r2,r2,r3 ? * 9
+
  00196e70: 92030005 lbu r3,0x0005(r16)           |{{f/load|Considered Action Elevation}}
  00196e84: 00021140 sll r2,r2,0x05 ? * 120
+
  00196e74: 92040006 lbu r4,0x0006(r16)           |{{f/load|Considered Action Y}}
  00196e88: 00521021 addu r2,r2,r18 Add the AI Pointer
+
  00196e78: 92250004 lbu r5,0x0004(r17)           |{{f/load|Previous Action X}}
  00196e8c: 24420174 addiu r2,r2,0x0174 Targeting Matrix?
+
  00196e7c: 000310c0 sll r2,r3,0x03               |
  00196e90: 00042100 sll r4,r4,0x04
+
  00196e80: 00431021 addu r2,r2,r3                 |
  00196e94: 00822021 addu r4,r4,r2
+
  00196e84: 00021140 sll r2,r2,0x05               |{{f/std|Elevation * 0x120}}
 
+
  00196e88: 00521021 addu r2,r2,r18               |
  00196e98: 92020004 lbu r2,0x0004(r16)
+
  00196e8c: 24420174 addiu r2,r2,0x0174           |{{f/adr|Pointer to AI 0x174 + Elevation offset}} {{f/std|AI 0x174 is proximity score matrix}}
  00196e9c: 92230005 lbu r3,0x0005(r17)
+
  00196e90: 00042100 sll r4,r4,0x04               |
  00196ea0: 00822021 addu r4,r4,r2
+
  00196e94: 00822021 addu r4,r4,r2                 |{{f/std|+ Y offset}}
  00196ea4: 000310c0 sll r2,r3,0x03
+
  00196e98: 92020004 lbu r2,0x0004(r16)           |{{f/load|Considered Action X}}
  00196ea8: 00431021 addu r2,r2,r3
+
  00196e9c: 92230005 lbu r3,0x0005(r17)           |{{f/load|Previous action Elevation}}
  00196eac: 00021140 sll r2,r2,0x05
+
  00196ea0: 00822021 addu r4,r4,r2                 |{{f/std|+ X offset}}
  00196eb0: 00521021 addu r2,r2,r18
+
  00196ea4: 000310c0 sll r2,r3,0x03               |
  00196eb4: 24420174 addiu r2,r2,0x0174
+
  00196ea8: 00431021 addu r2,r2,r3                 |
  00196eb8: 92230006 lbu r3,0x0006(r17)
+
  00196eac: 00021140 sll r2,r2,0x05               |
  00196ebc: 90840000 lbu r4,0x0000(r4)
+
  00196eb0: 00521021 addu r2,r2,r18               |
  00196ec0: 00031900 sll r3,r3,0x04
+
  00196eb4: 24420174 addiu r2,r2,0x0174           |
  00196ec4: 00621821 addu r3,r3,r2
+
  00196eb8: 92230006 lbu r3,0x0006(r17)           |
  00196ec8: 00651821 addu r3,r3,r5
+
  00196ebc: 90840000 lbu r4,0x0000(r4)             |{{f/load|Considered Action's  Tile proximity score}} {{f/std|AI 0x174}}
  00196ecc: 90620000 lbu r2,0x0000(r3)
+
  00196ec0: 00031900 sll r3,r3,0x04               |
  00196ed0: 00000000 nop
+
  00196ec4: 00621821 addu r3,r3,r2                 |
  00196ed4: 0082102a slt r2,r4,r2
+
  00196ec8: 00651821 addu r3,r3,r5                 |
 +
  00196ecc: 90620000 lbu r2,0x0000(r3)             |{{f/load|Previous Action's Tile proximity score}} {{f/std|AI 0x174}}
 +
  00196ed0: 00000000 nop                           |
 +
  00196ed4: 0082102a slt r2,r4,r2                 |{{f/Returns|Returns 0x01 if Current proximity score < Previous one}} {{f/std| Safer destination ?}}
 
  00196ed8: 8fbf001c lw r31,0x001c(r29)
 
  00196ed8: 8fbf001c lw r31,0x001c(r29)
 
  00196edc: 8fb20018 lw r18,0x0018(r29)
 
  00196edc: 8fb20018 lw r18,0x0018(r29)
Line 57: Line 60:
 
  00196eec: 03e00008 jr r31
 
  00196eec: 03e00008 jr r31
 
  00196ef0: 00000000 nop
 
  00196ef0: 00000000 nop
 +
===Return locations===
 +
'''BATTLE.BIN'''
 +
  00197008: [[Compare_Set_Highest_Unit_Target_Priority_(00196fc4)]]
 +
  00197020: [[Compare_Set_Highest_Unit_Target_Priority_(00196fc4)]]
 +
  0019d34c: [[Check_Set_Highest_Unit_Priority_(0019d308)]]

Latest revision as of 19:01, 2 June 2024

BATTLE.BIN :  - Set_Highest_Target_Priority_(00196e20)
------------------------------------------------------------------------------------------
Parameter : r4 = AI 0x0014
            r5 = AI 0x0034
Return : r2 = 0x01 if Higher score or Safer Tile if same score
         r2 = 0x00 if not
------------------------------------------------------------------------------------------
00196e20: 27bdffe0 addiu r29,r29,-0x0020     |
00196e24: afb00010 sw r16,0x0010(r29)        |
00196e28: 00808021 addu r16,r4,r0            |r16 = Pointer to AI 0x0014 
00196e2c: afb10014 sw r17,0x0014(r29)        |
00196e30: 00a08821 addu r17,r5,r0            |r17 = Pointer to AI 0x0034
00196e34: 2604001c addiu r4,r16,0x001c       |Pointer to AI 0x0030
00196e38: 2625001c addiu r5,r17,0x001c       |Pointer to AI 0x0050
00196e3c: afbf001c sw r31,0x001c(r29)        |
00196e40: 0c065b6c jal 0x00196db0            |-->Compare Target Priority and Hit Rate (00196db0)
00196e44: afb20018 sw r18,0x0018(r29)        |
00196e48: 3c12801a lui r18,0x801a            |
00196e4c: 2652f3c4 addiu r18,r18,-0x0c3c     |0x80193fc4
00196e50: 00402021 addu r4,r2,r0             |
00196e54: 34020002 ori r2,r0,0x0002          |
00196e58: 14820003 bne r4,r2,0x00196e68      #If returned value is 0x02  Higher priority score, higher Hit%, higher AI 0x30
00196e5c: 34030001 ori r3,r0,0x0001              |
00196e60: 08065bb6 j 0x00196ed8                  |Exit Return 0x01
00196e64: 34020001 ori r2,r0,0x0001              |
00196e68: 1483001b bne r4,r3,0x00196ed8      #if returned value is 0x00 Exit Return 0x00 lower in everything
00196e6c: 00001021 addu r2,r0,r0             |
                                             Else : returned value is 0x01 (Strict equality)
00196e70: 92030005 lbu r3,0x0005(r16)            |Considered Action Elevation
00196e74: 92040006 lbu r4,0x0006(r16)            |Considered Action Y
00196e78: 92250004 lbu r5,0x0004(r17)            |Previous Action X
00196e7c: 000310c0 sll r2,r3,0x03                |
00196e80: 00431021 addu r2,r2,r3                 |
00196e84: 00021140 sll r2,r2,0x05                |Elevation * 0x120
00196e88: 00521021 addu r2,r2,r18                |
00196e8c: 24420174 addiu r2,r2,0x0174            |Pointer to AI 0x174 + Elevation offset AI 0x174 is proximity score matrix
00196e90: 00042100 sll r4,r4,0x04                |
00196e94: 00822021 addu r4,r4,r2                 |+ Y offset
00196e98: 92020004 lbu r2,0x0004(r16)            |Considered Action X
00196e9c: 92230005 lbu r3,0x0005(r17)            |Previous action Elevation
00196ea0: 00822021 addu r4,r4,r2                 |+ X offset
00196ea4: 000310c0 sll r2,r3,0x03                |
00196ea8: 00431021 addu r2,r2,r3                 |
00196eac: 00021140 sll r2,r2,0x05                |
00196eb0: 00521021 addu r2,r2,r18                |
00196eb4: 24420174 addiu r2,r2,0x0174            |
00196eb8: 92230006 lbu r3,0x0006(r17)            |
00196ebc: 90840000 lbu r4,0x0000(r4)             |Considered Action's  Tile proximity score AI 0x174
00196ec0: 00031900 sll r3,r3,0x04                |
00196ec4: 00621821 addu r3,r3,r2                 |
00196ec8: 00651821 addu r3,r3,r5                 |
00196ecc: 90620000 lbu r2,0x0000(r3)             |Previous Action's Tile proximity score AI 0x174
00196ed0: 00000000 nop                           |
00196ed4: 0082102a slt r2,r4,r2                  |Returns 0x01 if Current proximity score < Previous one  Safer destination ?
00196ed8: 8fbf001c lw r31,0x001c(r29)
00196edc: 8fb20018 lw r18,0x0018(r29)
00196ee0: 8fb10014 lw r17,0x0014(r29)
00196ee4: 8fb00010 lw r16,0x0010(r29)
00196ee8: 27bd0020 addiu r29,r29,0x0020
00196eec: 03e00008 jr r31
00196ef0: 00000000 nop

Return locations

BATTLE.BIN
 00197008: Compare_Set_Highest_Unit_Target_Priority_(00196fc4)
 00197020: Compare_Set_Highest_Unit_Target_Priority_(00196fc4)
 0019d34c: Check_Set_Highest_Unit_Priority_(0019d308)