Difference between revisions of "Check AI Target Type (00196adc)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m (Dokurider moved page 00196adc - 00196c88 to Check AI Target Type (00196adc): Renaming and adding new documentation)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - Check_AI_Target_Type_(00196adc)
 +
Reset and refill AI Table at 0x8019f3c4 + 0a74 + 0xe2d offset if Tiles are reachable and match preset value condition)
 +
------------------------------------------------------------------------------------------
 +
Parameter : r4
 +
Return : r2 = 0x1 if at least one tile meet the conditions
 +
          r2 = x00 if no tiles found
 +
------------------------------------------------------------------------------------------
 +
00196adc: 27bdffd0 addiu r29,r29,-0x0030    |
 +
00196ae0: afb10024 sw r17,0x0024(r29)        |
 +
00196ae4: 00808821 addu r17,r4,r0            |{{f/std|<nowiki>r17 = Ability/Move Range</nowiki>}}
 +
00196ae8: afb00020 sw r16,0x0020(r29)        |
 +
00196aec: 00008021 addu r16,r0,r0            |
 +
00196af0: 3c05801a lui r5,0x801a            |
 +
00196af4: 24a5f3c4 addiu r5,r5,-0x0c3c      |{{f/adr|0x8019f3c4}}
 +
00196af8: 00003021 addu r6,r0,r0            |{{f/std|reset Y row counter}}
 +
00196afc: afbf0028 sw r31,0x0028(r29)        |
 +
                                            {{f/bloop|Loop - Initialize Tile's Data at AI Table  (AI 0xa74 + 0xe2d offset)}}
 +
00196b00: 90a30e2d lbu r3,0x0e2d(r5)            |{{f/load|Load AI 0xe2d}} {{f/std|Offset for some Tile's Table}}
 +
00196b04: 00062040 sll r4,r6,0x01                |{{f/std|This iteration Y * 2}}
 +
00196b08: 000310c0 sll r2,r3,0x03                |
 +
00196b0c: 00431021 addu r2,r2,r3                |
 +
00196b10: 000210c0 sll r2,r2,0x03                |{{f/std|0xe2d * 0x48}}
 +
00196b14: 00a21021 addu r2,r5,r2                |
 +
00196b18: 00821021 addu r2,r4,r2                |{{f/adr|Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d)}} {{f/std|Low elevation}}
 +
00196b1c: a4400a74 sh r0,0x0a74(r2)              |
 +
00196b20: 90a30e2d lbu r3,0x0e2d(r5)            |{{f/load|Load AI 0xe2d}}
 +
00196b24: 24c60001 addiu r6,r6,0x0001            |{{f/std|Y counter + 1}}
 +
00196b28: 000310c0 sll r2,r3,0x03                |
 +
00196b2c: 00431021 addu r2,r2,r3                |
 +
00196b30: 000210c0 sll r2,r2,0x03                |{{f/std|0xe2d * 0x48}}
 +
00196b34: 00a21021 addu r2,r5,r2                |
 +
00196b38: 00822021 addu r4,r4,r2                |
 +
00196b3c: 28c20012 slti r2,r6,0x0012            |
 +
00196b40: 1440ffef bne r2,r0,0x00196b00      {{f/eloop|Do 18 (0x12) times}}
 +
00196b44: a4800a98 sh r0,0x0a98(r4)              |{{f/adr|Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d)}} {{f/std|High elevation elevation}}
 
   
 
   
  0019693c: 27bdffe8 addiu r29,r29,0xffe8
+
  00196b48: 0000c821 addu r25,r0,r0            |{{f/std|Reset elevation counter}}
  00196940: afb10014 sw r17,0x0014(r29)
+
  00196b4c: 00a0c021 addu r24,r5,r0           |{{f/std|0x8019f3c4}}
00196944: 00a08821 addu r17,r5,r0
+
  00196b50: 00a07821 addu r15,r5,r0           |{{f/std|0x8019f3c4}}
  00196948: 3c0b7fff lui r11,0x7fff
+
  00196b54: 00007021 addu r14,r0,r0           |{{f/std|Initial elevation offset}}
0019694c: 356bffff ori r11,r11,0xffff
+
                                            {{f/bloop|LOOP - Both elevation}}
00196950: 3c0e7fff lui r14,0x7fff
+
  00196b58: 90a20e3b lbu r2,0x0e3b(r5)             |{{f/load|Map max Y}}
00196954: 35ceffff ori r14,r14,0xffff
+
  00196b5c: 00000000 nop                           |
00196958: 00006821 addu r13,r0,r0
+
  00196b60: 18400032 blez r2,0x00196c2c            {{f/Cond|If Max Y is invalid : branch to }} {{f/loc|Next Elevation iteration}}
0019695c: 00002821 addu r5,r0,r0
+
  00196b64: 00004021 addu r8,r0,r0                 |{{f/std|Reset Y counter}}
  00196960: 0000c821 addu r25,r0,r0
+
  00196b68: 01c06821 addu r13,r14,r0               |{{f/std|Elevation offset (0x24)}}
  00196964: 3c02801a lui r2,0x801a
+
  00196b6c: 00004821 addu r9,r0,r0                |
00196968: 904201f1 lbu r2,0x01f1(r2) ??
+
  00196b70: 270b03b4 addiu r11,r24,0x03b4          |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+ elevation offset)}}
0019696c: 3c0c801a lui r12,0x801a
+
  00196b74: 25ea0a74 addiu r10,r15,0x0a74         |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074 + elevation offset}} {{f/std| (offset 0x00 - not based on 0xe2d)}}
00196970: 258cf3c4 addiu r12,r12,0xf3c4 r12 = AI data
+
                                                {{f/bloop|LOOP - All Y Rows}}
00196974: afb00010 sw r16,0x0010(r29)
+
  00196b78: 95430000 lhu r3,0x0000(r10)               |{{f/load|This Y Row halfword of flags}} {{f/std| (offset 0x00 - not based on 0xe2d)}}
00196978: 00021080 sll r2,r2,0x02
+
  00196b7c: 00000000 nop                               |
0019697c: 24420cc4 addiu r2,r2,0x0cc4
+
  00196b80: 10600023 beq r3,r0,0x00196c10              {{f/Cond|If All Flags are OFF : branch to }} {{f/loc|Next Y}}
00196980: 004c5021 addu r10,r2,r12
+
  00196b84: 00000000 nop                                   |
  00196984: 91820e3b lbu r2,0x0e3b(r12) load map max Y
+
  00196b88: 90a20e3a lbu r2,0x0e3a(r5)                 |{{f/load|Map Max X}}
  00196988: 00000000 nop
+
  00196b8c: 00000000 nop                               |
  0019698c: 18400045 blez r2,0x00196aa4
+
  00196b90: 1840001f blez r2,0x00196c10                {{f/Cond|If Max X is invalid : branch to }} {{f/loc|Next Y}}
  00196990: 00004821 addu r9,r0,r0
+
  00196b94: 00003021 addu r6,r0,r0                     |{{f/std|Reset X counter}}
  00196994: 03208021 addu r16,r25,r0
+
  00196b98: 00606021 addu r12,r3,r0                   |{{f/std|Pass Y row's flags}}
00196998: 00a0c021 addu r24,r5,r0
+
  00196b9c: 01603821 addu r7,r11,r0                    |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+ elevation offset + Y offset)}} {{f/std|Will Take X offset at each X iteration}}
0019699c: 91820e2d lbu r2,0x0e2d(r12) load unit ID
+
  001969a0: 00000000 nop
+
                                                    {{f/bloop|LOOP - All X tiles in Y Rows}}
001969a4: 000218c0 sll r3,r2,0x03 ??*8
+
00196ba0: 00cc1004 sllv r2,r12,r6                        |{{f/std|This Tile bit is in 0x8000 position}}
001969a8: 00621821 addu r3,r3,r2 ??*9
+
  00196ba4: 30428000 andi r2,r2,0x8000                     |
  001969ac: 000318c0 sll r3,r3,0x03 ??*72 (0x48)
+
  00196ba8: 10400014 beq r2,r0,0x00196bfc                  {{f/Cond|if this Tile is not reachable : branch to }} {{f/loc|Next X}}
  001969b0: 006c1821 addu r3,r3,r12
+
  00196bac: 00000000 nop                                  |
001969b4: 24630a74 addiu r3,r3,0x0a74
+
00196bb0: 90e20000 lbu r2,0x0000(r7)                    |{{f/load|This Tile distance to Acting unit's Target}}
001969b8: 02031821 addu r3,r16,r3 address + counter (0x24 at a time)
+
  00196bb4: 00000000 nop                                  |
001969bc: 00091040 sll r2,r9,0x01 other counter*2
+
  00196bb8: 0222102a slt r2,r17,r2                         |{{f/std|0x1 if Preset Value < this Tile distance to Target}}
  001969c0: 00431021 addu r2,r2,r3
+
  00196bbc: 1440000f bne r2,r0,0x00196bfc                  {{f/Cond|if Target is above Preset Value : branch to }} {{f/loc|Next X}}
001969c4: 94430000 lhu r3,0x0000(r2) load ??
+
  00196bc0: 00000000 nop                                   |
  001969c8: 00000000 nop
+
  00196bc4: 90a30e2d lbu r3,0x0e2d(r5)                    |{{f/load|Load 0xe2d}}
  001969cc: 10600030 beq r3,r0,0x00196a90
+
  00196bc8: 34100001 ori r16,r0,0x0001                    |{{f/std|1 Tile in range Flag}}
  001969d0: 00000000 nop
+
  00196bcc: 000310c0 sll r2,r3,0x03                        |
  001969d4: 91820e3a lbu r2,0x0e3a(r12) load map max X
+
  00196bd0: 00431021 addu r2,r2,r3                        |
  001969d8: 00000000 nop
+
  00196bd4: 000210c0 sll r2,r2,0x03                        |{{f/std|0xe2d Offset (0x48)}}
  001969dc: 1840002c blez r2,0x00196a90 branch if invalid?
+
  00196bd8: 00451021 addu r2,r2,r5                        |
  001969e0: 00004021 addu r8,r0,r0
+
  00196bdc: 24420a74 addiu r2,r2,0x0a74                    |{{f/std|0x8019f3c4 + 0xa74 + 0xe2d offset}}
  001969e4: 00607821 addu r15,r3,r0
+
  00196be0: 01a21021 addu r2,r13,r2                       |{{f/std|+Elevation offset}}
  001969e8: 010f1004 sllv r2,r15,r8
+
  00196be4: 01221021 addu r2,r9,r2                        |{{f/std|+Y offset}}
  001969ec: 30428000 andi r2,r2,0x8000
+
  00196be8: 34038000 ori r3,r0,0x8000                      |{{f/std|Prepare Bitmask}}
  001969f0: 10400022 beq r2,r0,0x00196a7c
+
  00196bec: 94440000 lhu r4,0x0000(r2)                    |{{f/load|Load this Tile's Y row's flags}}
  001969f4: 00091100 sll r2,r9,0x04
+
  00196bf0: 00c31807 srav r3,r3,r6                        |{{f/std|This Tile Bitmask}}
  001969f8: 00481021 addu r2,r2,r8
+
  00196bf4: 00832025 or r4,r4,r3                          |
  001969fc: 03021821 addu r3,r24,r2
+
  00196bf8: a4440000 sh r4,0x0000(r2)                      |{{f/store|Enable this Tile flag}}
  00196a00: 006c3021 addu r6,r3,r12
+
  00196bfc: 90a20e3a lbu r2,0x0e3a(r5)                    |{{f/load|Map Max X}}
00196a04: 90c703b4 lbu r7,0x03b4(r6)
+
  00196c00: 24c60001 addiu r6,r6,0x0001                    |{{f/std|X counter + 1}}
  00196a08: 00000000 nop
+
  00196c04: 00c2102a slt r2,r6,r2                          |
  00196a0c: 0087102a slt r2,r4,r7
+
  00196c08: 1440ffe5 bne r2,r0,0x00196ba0              {{f/eloop|Loop while X < max X}}
  00196a10: 1440001a bne r2,r0,0x00196a7c
+
  00196c0c: 24e70001 addiu r7,r7,0x0001                    |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4 (+0x01 each X iteration)}}
  00196a14: 00031040 sll r2,r3,0x01
+
  00196c10: 25290002 addiu r9,r9,0x0002               |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074 + 0x2ed offset (+0x2 each Y iteration)}}
  00196a18: 004c1021 addu r2,r2,r12
+
  00196c14: 256b0010 addiu r11,r11,0x0010              |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+0x10 each Y iteration)}} {{f/std|0x10 each iteration}}
  00196a1c: 944305f4 lhu r3,0x05f4(r2)
+
  00196c18: 90a20e3b lbu r2,0x0e3b(r5)                 |{{f/load|Map Max Y}}
00196a20: 90c20174 lbu r2,0x0174(r6)
+
  00196c1c: 25080001 addiu r8,r8,0x0001               |{{f/std|Y counter +1}}
  00196a24: 00031c00 sll r3,r3,0x10
+
  00196c20: 0102102a slt r2,r8,r2                     |
  00196a28: 12200007 beq r17,r0,0x00196a48 branch if PV = 0
+
  00196c24: 1440ffd4 bne r2,r0,0x00196b78          {{f/eloop|Loop while Y counter < Max Y}}
  00196a2c: 00621821 addu r3,r3,r2
+
00196c28: 254a0002 addiu r10,r10,0x0002              |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074  (+0x2 each Y iteration)}} {{f/std|Table at offset 0x00}}
  00196a30: 14870003 bne r4,r7,0x00196a40
+
  00196c2c: 27180120 addiu r24,r24,0x0120          |{{f/std|Elevation offset for Table 0x3b4}}
  00196a34: 0163102a slt r2,r11,r3
+
  00196c30: 25ef0024 addiu r15,r15,0x0024          |{{f/std|Elevation offset for Table 0xa74}}
00196a38: 14400010 bne r2,r0,0x00196a7c
+
  00196c34: 27390001 addiu r25,r25,0x0001         |{{f/std|Elevation counter +1}}
  00196a3c: 00000000 nop
+
  00196c38: 2b220002 slti r2,r25,0x0002            |
  00196a40: 08065a99 j 0x00196a64
+
  00196c3c: 1440ffc6 bne r2,r0,0x00196b58      {{f/eloop|Loop 2 times}}
  00196a44: 00e02021 addu r4,r7,r0
+
  00196c40: 25ce0024 addiu r14,r14,0x0024          |{{f/std|Elevation offset}}
  00196a48: 0163102a slt r2,r11,r3
+
  00196a4c: 1440000b bne r2,r0,0x00196a7c
+
  00196c44: 1600000b bne r16,r0,0x00196c74    {{f/Cond|If At least One Tile Matches the Preset conditions}} {{f/loc|Exit }} {{f/Returns|Returns 0x01}}
  00196a50: 00000000 nop
+
  00196c48: 34020001 ori r2,r0,0x0001             |
00196a54: 146b0003 bne r3,r11,0x00196a64
+
                                            '''Else : No Tiles Found'''
  00196a58: 01c7102a slt r2,r14,r7
+
  00196c4c: 90a20e2d lbu r2,0x0e2d(r5)            |{{f/load|Laod 0xe2d}}
  00196a5c: 14400007 bne r2,r0,0x00196a7c
+
00196c50: 34060048 ori r6,r0,0x0048              |{{f/std|Send Size of data}}
  00196a60: 00000000 nop
+
  00196c54: 000220c0 sll r4,r2,0x03                |
00196a64: 00605821 addu r11,r3,r0
+
00196c58: 00822021 addu r4,r4,r2                |
00196a68: 00e07021 addu r14,r7,r0
+
00196c5c: 000420c0 sll r4,r4,0x03                |{{f/std|0xe2d Offset (0x48)}}
  00196a6c: a1480000 sb r8,0x0000(r10)
+
  00196c60: 24840a74 addiu r4,r4,0x0a74            |
  00196a70: a1490002 sb r9,0x0002(r10)
+
00196c64: 00a42021 addu r4,r5,r4                |{{f/adr|0x8019f3c4 + 0xa74 + 0x2ed offset}}
  00196a74: a14d0001 sb r13,0x0001(r10)
+
  00196c68: 0c066ac2 jal 0x0019ab08                |{{f/jal|Transfer Halfword Values|Transfer Halfword Values}} {{f/std|Transfer data from r5 to r4}}
00196a78: a1400003 sb r0,0x0003(r10)
+
  00196c6c: 24a50a74 addiu r5,r5,0x0a74            |{{f/adr|0x8019f3c4 + 0xa74}}
  00196a7c: 91820e3a lbu r2,0x0e3a(r12) load map max X
+
  00196c70: 00001021 addu r2,r0,r0                |{{f/Returns|Return 0x00}}
  00196a80: 25080001 addiu r8,r8,0x0001
+
  00196c74: 8fbf0028 lw r31,0x0028(r29)
  00196a84: 0102102a slt r2,r8,r2
+
  00196c78: 8fb10024 lw r17,0x0024(r29)
  00196a88: 1440ffd8 bne r2,r0,0x001969ec
+
  00196c7c: 8fb00020 lw r16,0x0020(r29)
  00196a8c: 010f1004 sllv r2,r15,r8
+
  00196c80: 27bd0030 addiu r29,r29,0x0030
  00196a90: 91820e3b lbu r2,0x0e3b(r12) load map max Y
+
  00196c84: 03e00008 jr r31
  00196a94: 25290001 addiu r9,r9,0x0001
+
  00196c88: 00000000 nop
  00196a98: 0122102a slt r2,r9,r2
+
===Return locations===
  00196a9c: 1440ffbf bne r2,r0,0x0019699c
+
'''BATTLE.BIN'''
  00196aa0: 00000000 nop
+
  00196680: [[Map_movement_decision/data_setting]]  Condition Value = Target distance -1 (one case)
  00196aa4: 24a50120 addiu r5,r5,0x0120
+
  00198420: [[001982d8_-_001984e8]]
  00196aa8: 25ad0001 addiu r13,r13,0x0001
 
  00196aac: 29a20002 slti r2,r13,0x0002
 
  00196ab0: 1440ffb4 bne r2,r0,0x00196984
 
  00196ab4: 27390024 addiu r25,r25,0x0024 some counter++
 
  00196ab8: 3c027fff lui r2,0x7fff
 
  00196abc: 3442ffff ori r2,r2,0xffff
 
  00196ac0: 01621026 xor r2,r11,r2
 
  00196ac4: 0002102b sltu r2,r0,r2
 
  00196ac8: 8fb10014 lw r17,0x0014(r29)
 
  00196acc: 8fb00010 lw r16,0x0010(r29)
 
  00196ad0: 27bd0018 addiu r29,r29,0x0018
 
  00196ad4: 03e00008 jr r31
 
  00196ad8: 00000000 nop
 
</font>
 

Latest revision as of 19:48, 14 April 2024

BATTLE.BIN :  - Check_AI_Target_Type_(00196adc)
Reset and refill AI Table at 0x8019f3c4 + 0a74 + 0xe2d offset if Tiles are reachable and match preset value condition)
------------------------------------------------------------------------------------------
Parameter : r4
Return : r2 = 0x1 if at least one tile meet the conditions
         r2 = x00 if no tiles found
------------------------------------------------------------------------------------------
00196adc: 27bdffd0 addiu r29,r29,-0x0030     |
00196ae0: afb10024 sw r17,0x0024(r29)        |
00196ae4: 00808821 addu r17,r4,r0            |r17 = Ability/Move Range
00196ae8: afb00020 sw r16,0x0020(r29)        |
00196aec: 00008021 addu r16,r0,r0            |
00196af0: 3c05801a lui r5,0x801a             |
00196af4: 24a5f3c4 addiu r5,r5,-0x0c3c       |0x8019f3c4
00196af8: 00003021 addu r6,r0,r0             |reset Y row counter
00196afc: afbf0028 sw r31,0x0028(r29)        |
                                            @Loop - Initialize Tile's Data at AI Table  (AI 0xa74 + 0xe2d offset)
00196b00: 90a30e2d lbu r3,0x0e2d(r5)             |Load AI 0xe2d Offset for some Tile's Table
00196b04: 00062040 sll r4,r6,0x01                |This iteration Y * 2
00196b08: 000310c0 sll r2,r3,0x03                |
00196b0c: 00431021 addu r2,r2,r3                 |
00196b10: 000210c0 sll r2,r2,0x03                |0xe2d * 0x48
00196b14: 00a21021 addu r2,r5,r2                 |
00196b18: 00821021 addu r2,r4,r2                 |Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d) Low elevation
00196b1c: a4400a74 sh r0,0x0a74(r2)              |
00196b20: 90a30e2d lbu r3,0x0e2d(r5)             |Load AI 0xe2d
00196b24: 24c60001 addiu r6,r6,0x0001            |Y counter + 1
00196b28: 000310c0 sll r2,r3,0x03                |
00196b2c: 00431021 addu r2,r2,r3                 |
00196b30: 000210c0 sll r2,r2,0x03                |0xe2d * 0x48
00196b34: 00a21021 addu r2,r5,r2                 |
00196b38: 00822021 addu r4,r4,r2                 |
00196b3c: 28c20012 slti r2,r6,0x0012             |
00196b40: 1440ffef bne r2,r0,0x00196b00      Λ Do 18 (0x12) times
00196b44: a4800a98 sh r0,0x0a98(r4)              |Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d) High elevation elevation

00196b48: 0000c821 addu r25,r0,r0            |Reset elevation counter
00196b4c: 00a0c021 addu r24,r5,r0            |0x8019f3c4
00196b50: 00a07821 addu r15,r5,r0            |0x8019f3c4
00196b54: 00007021 addu r14,r0,r0            |Initial elevation offset
                                            @LOOP  - Both elevation
00196b58: 90a20e3b lbu r2,0x0e3b(r5)             |Map max Y
00196b5c: 00000000 nop                           |
00196b60: 18400032 blez r2,0x00196c2c            #If Max Y is invalid : branch to  Next Elevation iteration
00196b64: 00004021 addu r8,r0,r0                 |Reset Y counter
00196b68: 01c06821 addu r13,r14,r0               |Elevation offset (0x24)
00196b6c: 00004821 addu r9,r0,r0                 |
00196b70: 270b03b4 addiu r11,r24,0x03b4          |Dynamic pointer to 0x8019f3c4 + 0x3b4   (+ elevation offset)
00196b74: 25ea0a74 addiu r10,r15,0x0a74          |Dynamic pointer to 0x8019f3c4 + 0xa074 + elevation offset  (offset 0x00 - not based on 0xe2d)
                                                @LOOP - All Y Rows
00196b78: 95430000 lhu r3,0x0000(r10)                |This Y Row halfword of flags  (offset 0x00 - not based on 0xe2d)
00196b7c: 00000000 nop                               |
00196b80: 10600023 beq r3,r0,0x00196c10              #If All Flags are OFF : branch to  Next Y
00196b84: 00000000 nop                                   |
00196b88: 90a20e3a lbu r2,0x0e3a(r5)                 |Map Max X
00196b8c: 00000000 nop                               |
00196b90: 1840001f blez r2,0x00196c10                #If Max X is invalid : branch to  Next Y
00196b94: 00003021 addu r6,r0,r0                     |Reset X counter
00196b98: 00606021 addu r12,r3,r0                    |Pass Y row's flags
00196b9c: 01603821 addu r7,r11,r0                    |Dynamic pointer to 0x8019f3c4 + 0x3b4   (+ elevation offset + Y offset) Will Take X offset at each X iteration

                                                    @LOOP - All X tiles in Y Rows
00196ba0: 00cc1004 sllv r2,r12,r6                        |This Tile bit is in 0x8000 position
00196ba4: 30428000 andi r2,r2,0x8000                     |
00196ba8: 10400014 beq r2,r0,0x00196bfc                  #if this Tile is not reachable : branch to  Next X
00196bac: 00000000 nop                                   |
00196bb0: 90e20000 lbu r2,0x0000(r7)                     |This Tile distance to Acting unit's Target
00196bb4: 00000000 nop                                   |
00196bb8: 0222102a slt r2,r17,r2                         |0x1 if Preset Value < this Tile distance to Target
00196bbc: 1440000f bne r2,r0,0x00196bfc                  #if Target is above Preset Value : branch to  Next X
00196bc0: 00000000 nop                                   |
00196bc4: 90a30e2d lbu r3,0x0e2d(r5)                     |Load 0xe2d
00196bc8: 34100001 ori r16,r0,0x0001                     |1 Tile in range Flag
00196bcc: 000310c0 sll r2,r3,0x03                        |
00196bd0: 00431021 addu r2,r2,r3                         |
00196bd4: 000210c0 sll r2,r2,0x03                        |0xe2d Offset (0x48)
00196bd8: 00451021 addu r2,r2,r5                         |
00196bdc: 24420a74 addiu r2,r2,0x0a74                    |0x8019f3c4 + 0xa74 + 0xe2d offset
00196be0: 01a21021 addu r2,r13,r2                        |+Elevation offset
00196be4: 01221021 addu r2,r9,r2                         |+Y offset
00196be8: 34038000 ori r3,r0,0x8000                      |Prepare Bitmask
00196bec: 94440000 lhu r4,0x0000(r2)                     |Load this Tile's Y row's flags
00196bf0: 00c31807 srav r3,r3,r6                         |This Tile Bitmask
00196bf4: 00832025 or r4,r4,r3                           |
00196bf8: a4440000 sh r4,0x0000(r2)                      |Enable this Tile flag
00196bfc: 90a20e3a lbu r2,0x0e3a(r5)                     |Map Max X
00196c00: 24c60001 addiu r6,r6,0x0001                    |X counter + 1
00196c04: 00c2102a slt r2,r6,r2                          |
00196c08: 1440ffe5 bne r2,r0,0x00196ba0              Λ Loop while X < max X
00196c0c: 24e70001 addiu r7,r7,0x0001                    |Dynamic pointer to 0x8019f3c4 + 0x3b4  (+0x01 each X iteration)
00196c10: 25290002 addiu r9,r9,0x0002                |Dynamic pointer to 0x8019f3c4 + 0xa074 + 0x2ed offset (+0x2 each Y iteration)
00196c14: 256b0010 addiu r11,r11,0x0010              |Dynamic pointer to 0x8019f3c4 + 0x3b4   (+0x10 each Y iteration) 0x10 each iteration
00196c18: 90a20e3b lbu r2,0x0e3b(r5)                 |Map Max Y
00196c1c: 25080001 addiu r8,r8,0x0001                |Y counter +1
00196c20: 0102102a slt r2,r8,r2                      |
00196c24: 1440ffd4 bne r2,r0,0x00196b78          Λ Loop while Y counter < Max Y
00196c28: 254a0002 addiu r10,r10,0x0002              |Dynamic pointer to 0x8019f3c4 + 0xa074  (+0x2 each Y iteration) Table at offset 0x00
00196c2c: 27180120 addiu r24,r24,0x0120          |Elevation offset for Table 0x3b4
00196c30: 25ef0024 addiu r15,r15,0x0024          |Elevation offset for Table 0xa74
00196c34: 27390001 addiu r25,r25,0x0001          |Elevation counter +1
00196c38: 2b220002 slti r2,r25,0x0002            |
00196c3c: 1440ffc6 bne r2,r0,0x00196b58      Λ Loop 2 times
00196c40: 25ce0024 addiu r14,r14,0x0024          |Elevation offset

00196c44: 1600000b bne r16,r0,0x00196c74     #If At least One Tile Matches the Preset conditions Exit  Returns 0x01
00196c48: 34020001 ori r2,r0,0x0001              |
                                            Else : No Tiles Found
00196c4c: 90a20e2d lbu r2,0x0e2d(r5)             |Laod 0xe2d
00196c50: 34060048 ori r6,r0,0x0048              |Send Size of data
00196c54: 000220c0 sll r4,r2,0x03                |
00196c58: 00822021 addu r4,r4,r2                 |
00196c5c: 000420c0 sll r4,r4,0x03                |0xe2d Offset (0x48)
00196c60: 24840a74 addiu r4,r4,0x0a74            |
00196c64: 00a42021 addu r4,r5,r4                 |0x8019f3c4 + 0xa74 + 0x2ed offset
00196c68: 0c066ac2 jal 0x0019ab08                |-->Transfer Halfword Values Transfer data from r5 to r4
00196c6c: 24a50a74 addiu r5,r5,0x0a74            |0x8019f3c4 + 0xa74
00196c70: 00001021 addu r2,r0,r0                 |Return 0x00
00196c74: 8fbf0028 lw r31,0x0028(r29)
00196c78: 8fb10024 lw r17,0x0024(r29)
00196c7c: 8fb00020 lw r16,0x0020(r29)
00196c80: 27bd0030 addiu r29,r29,0x0030
00196c84: 03e00008 jr r31
00196c88: 00000000 nop

Return locations

BATTLE.BIN
 00196680: Map_movement_decision/data_setting   Condition Value = Target distance -1 (one case)
 00198420: 001982d8_-_001984e8