Difference between revisions of "Get unit that matches coordinates"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(The correct routine)
m
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  0019d294: 00003021 addu r6,r0,r0
+
'''BATTLE.BIN''' - Get unit that matches coordinates        ALTERNATIVE VERSION [[Find Unit at Coordinates (0x19d294)]]
  0019d298: 340700ff ori r7,r0,0x00ff
+
------------------------------------------------------------------------------------
  0019d29c: 3c058019 lui r5,0x8019
+
Parameters : r4 = pointer to some tile coordinates (AI 0x182c pointer only ?)
  0019d2a0: 24a508cc addiu r5,r5,0x08cc
+
Returns : r2 = Unit counter (position in Battle stats) if unit share Tile coordinates
  0019d2a4: 90a20001 lbu r2,0x0001(r5)
+
------------------------------------------------------------------------------------
  0019d2a8: 00000000 nop
+
  0019d294: 00003021 addu r6,r0,r0           |
  0019d2ac: 10470010 beq r2,r7,0x0019d2f0
+
  0019d298: 340700ff ori r7,r0,0x00ff         |
  0019d2b0: 00000000 nop
+
  0019d29c: 3c058019 lui r5,0x8019           |
  0019d2b4: 90a30047 lbu r3,0x0047(r5)
+
  0019d2a0: 24a508cc addiu r5,r5,0x08cc       |{{f/adr|Start of Unit Data}}
  0019d2b8: 90820000 lbu r2,0x0000(r4)
+
                                            {{f/bloop|LOOP - All units}}
  0019d2bc: 00000000 nop
+
  0019d2a4: 90a20001 lbu r2,0x0001(r5)           |{{f/load|Unit ID}}
  0019d2c0: 1462000b bne r3,r2,0x0019d2f0
+
  0019d2a8: 00000000 nop                         |
  0019d2c4: 00000000 nop
+
  0019d2ac: 10470010 beq r2,r7,0x0019d2f0         {{f/Cond|If Unit do not exist : branch to }} {{f/loc| Next unit}}
  0019d2c8: 90a30048 lbu r3,0x0048(r5)
+
  0019d2b0: 00000000 nop                             |
  0019d2cc: 90820002 lbu r2,0x0002(r4)
+
  0019d2b4: 90a30047 lbu r3,0x0047(r5)           |{{f/load|This Unit X}}
  0019d2d0: 00000000 nop
+
  0019d2b8: 90820000 lbu r2,0x0000(r4)           |{{f/load|Tile of interest X}}
  0019d2d4: 14620006 bne r3,r2,0x0019d2f0
+
  0019d2bc: 00000000 nop                         |
  0019d2d8: 00000000 nop
+
  0019d2c0: 1462000b bne r3,r2,0x0019d2f0         {{f/Cond|If Unit and Tile of interest share same X}}
  0019d2dc: 94a20048 lhu r2,0x0048(r5)
+
  0019d2c4: 00000000 nop                             |
  0019d2e0: 90830001 lbu r3,0x0001(r4)
+
  0019d2c8: 90a30048 lbu r3,0x0048(r5)               |{{f/load|This Unit Y}}
  0019d2e4: 000213c2 srl r2,r2,0x0f
+
  0019d2cc: 90820002 lbu r2,0x0002(r4)               |{{f/load|Tile of interest Y}}
  0019d2e8: 10430005 beq r2,r3,0x0019d300
+
  0019d2d0: 00000000 nop                             |
  0019d2ec: 00000000 nop
+
  0019d2d4: 14620006 bne r3,r2,0x0019d2f0             {{f/Cond|If Unit and Tile of interest share sameY}}
  0019d2f0: 24c60001 addiu r6,r6,0x0001
+
  0019d2d8: 00000000 nop                                 |
  0019d2f4: 28c20015 slti r2,r6,0x0015
+
  0019d2dc: 94a20048 lhu r2,0x0048(r5)                   |{{f/load|Y + Elevation}}
  0019d2f8: 1440ffea bne r2,r0,0x0019d2a4
+
  0019d2e0: 90830001 lbu r3,0x0001(r4)                   |{{f/load|Tile of interest Elevation}}
  0019d2fc: 24a501c0 addiu r5,r5,0x01c0
+
  0019d2e4: 000213c2 srl r2,r2,0x0f                       |{{f/std|This Unit Elevation}}
 +
  0019d2e8: 10430005 beq r2,r3,0x0019d300                 {{f/Cond|If This unit is on Tile of interest : }} {{f/loc| Returns Counter}}
 +
  0019d2ec: 00000000 nop                                     |
 +
  0019d2f0: 24c60001 addiu r6,r6,0x0001           |{{f/std|Unit counter + 1}}
 +
  0019d2f4: 28c20015 slti r2,r6,0x0015           |
 +
  0019d2f8: 1440ffea bne r2,r0,0x0019d2a4     {{f/eloop|Loop 0x15 Times}}
 +
  0019d2fc: 24a501c0 addiu r5,r5,0x01c0           |{{f/std|Unit Battle stats offset}}
 
  0019d300: 03e00008 jr r31
 
  0019d300: 03e00008 jr r31
 
  0019d304: 00c01021 addu r2,r6,r0
 
  0019d304: 00c01021 addu r2,r6,r0
 +
=== Returns locations ===
 +
'''BATTLE.BIN'''
 +
001965d4: [[Map_movement_decision/data_setting]]                          r4 = Acting Unit 0x8019f3c4 + 0x182c pointer
 +
00197878: [[Store_ability/skillset_data,_set_AI_settings_for_ability%3F]]
 +
0019bb40: [[AI_Check_if_Unit_is_a_Crystal/Treasure_(0019bb20)]]

Latest revision as of 19:46, 18 June 2024

BATTLE.BIN - Get unit that matches coordinates         ALTERNATIVE VERSION Find Unit at Coordinates (0x19d294)
------------------------------------------------------------------------------------
Parameters : r4 = pointer to some tile coordinates (AI 0x182c pointer only ?)
Returns : r2 = Unit counter (position in Battle stats) if unit share Tile coordinates
------------------------------------------------------------------------------------
0019d294: 00003021 addu r6,r0,r0            |
0019d298: 340700ff ori r7,r0,0x00ff         |
0019d29c: 3c058019 lui r5,0x8019            |
0019d2a0: 24a508cc addiu r5,r5,0x08cc       |Start of Unit Data
                                            @LOOP - All units
0019d2a4: 90a20001 lbu r2,0x0001(r5)            |Unit ID
0019d2a8: 00000000 nop                          |
0019d2ac: 10470010 beq r2,r7,0x0019d2f0         #If Unit do not exist : branch to   Next unit
0019d2b0: 00000000 nop                              |
0019d2b4: 90a30047 lbu r3,0x0047(r5)            |This Unit X
0019d2b8: 90820000 lbu r2,0x0000(r4)            |Tile of interest X
0019d2bc: 00000000 nop                          |
0019d2c0: 1462000b bne r3,r2,0x0019d2f0         #If Unit and Tile of interest share same X
0019d2c4: 00000000 nop                              |
0019d2c8: 90a30048 lbu r3,0x0048(r5)                |This Unit Y
0019d2cc: 90820002 lbu r2,0x0002(r4)                |Tile of interest Y
0019d2d0: 00000000 nop                              |
0019d2d4: 14620006 bne r3,r2,0x0019d2f0             #If Unit and Tile of interest share sameY
0019d2d8: 00000000 nop                                  |
0019d2dc: 94a20048 lhu r2,0x0048(r5)                    |Y + Elevation
0019d2e0: 90830001 lbu r3,0x0001(r4)                    |Tile of interest Elevation
0019d2e4: 000213c2 srl r2,r2,0x0f                       |This Unit Elevation
0019d2e8: 10430005 beq r2,r3,0x0019d300                 #If This unit is on Tile of interest :   Returns Counter
0019d2ec: 00000000 nop                                      |
0019d2f0: 24c60001 addiu r6,r6,0x0001           |Unit counter + 1
0019d2f4: 28c20015 slti r2,r6,0x0015            |
0019d2f8: 1440ffea bne r2,r0,0x0019d2a4     Λ Loop 0x15 Times
0019d2fc: 24a501c0 addiu r5,r5,0x01c0           |Unit Battle stats offset
0019d300: 03e00008 jr r31
0019d304: 00c01021 addu r2,r6,r0

Returns locations

BATTLE.BIN
001965d4: Map_movement_decision/data_setting                           r4 = Acting Unit 0x8019f3c4 + 0x182c pointer
00197878: Store_ability/skillset_data,_set_AI_settings_for_ability?
0019bb40: AI_Check_if_Unit_is_a_Crystal/Treasure_(0019bb20)