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

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Uploaded the correct routine)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
  Check Target Type
+
  '''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)
  00196adc: 27bdffd0 addiu r29,r29,0xffd0
+
------------------------------------------------------------------------------------------
  00196ae0: afb10024 sw r17,0x0024(r29)
+
Parameter : r4
  00196ae4: 00808821 addu r17,r4,r0 r17 = Main Target ID
+
Return : r2 = 0x1 if at least one tile meet the conditions
  00196ae8: afb00020 sw r16,0x0020(r29)
+
          r2 = x00 if no tiles found
  00196aec: 00008021 addu r16,r0,r0
+
------------------------------------------------------------------------------------------
  00196af0: 3c05801a lui r5,0x801a
+
  00196adc: 27bdffd0 addiu r29,r29,-0x0030    |
  00196af4: 24a5f3c4 addiu r5,r5,0xf3c4
+
  00196ae0: afb10024 sw r17,0x0024(r29)       |
  00196af8: 00003021 addu r6,r0,r0
+
  00196ae4: 00808821 addu r17,r4,r0           |{{f/std|<nowiki>r17 = Ability/Move Range</nowiki>}}
  00196afc: afbf0028 sw r31,0x0028(r29)
+
  00196ae8: afb00020 sw r16,0x0020(r29)       |
  00196b00: 90a30e2d lbu r3,0x0e2d(r5)
+
  00196aec: 00008021 addu r16,r0,r0           |
  00196b04: 00062040 sll r4,r6,0x01
+
  00196af0: 3c05801a lui r5,0x801a             |
  00196b08: 000310c0 sll r2,r3,0x03
+
  00196af4: 24a5f3c4 addiu r5,r5,-0x0c3c      |{{f/adr|0x8019f3c4}}
  00196b0c: 00431021 addu r2,r2,r3
+
  00196af8: 00003021 addu r6,r0,r0             |{{f/std|reset Y row counter}}
  00196b10: 000210c0 sll r2,r2,0x03
+
  00196afc: afbf0028 sw r31,0x0028(r29)       |
  00196b14: 00a21021 addu r2,r5,r2
+
                                            {{f/bloop|Loop - Initialize Tile's Data at AI Table  (AI 0xa74 + 0xe2d offset)}}
  00196b18: 00821021 addu r2,r4,r2
+
  00196b00: 90a30e2d lbu r3,0x0e2d(r5)             |{{f/load|Load AI 0xe2d}} {{f/std|Offset for some Tile's Table}}
  00196b1c: a4400a74 sh r0,0x0a74(r2)
+
  00196b04: 00062040 sll r4,r6,0x01               |{{f/std|This iteration Y * 2}}
  00196b20: 90a30e2d lbu r3,0x0e2d(r5)
+
  00196b08: 000310c0 sll r2,r3,0x03               |
  00196b24: 24c60001 addiu r6,r6,0x0001
+
  00196b0c: 00431021 addu r2,r2,r3                 |
  00196b28: 000310c0 sll r2,r3,0x03
+
  00196b10: 000210c0 sll r2,r2,0x03               |{{f/std|0xe2d * 0x48}}
  00196b2c: 00431021 addu r2,r2,r3
+
  00196b14: 00a21021 addu r2,r5,r2                 |
  00196b30: 000210c0 sll r2,r2,0x03
+
  00196b18: 00821021 addu r2,r4,r2                 |{{f/adr|Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d)}} {{f/std|Low elevation}}
  00196b34: 00a21021 addu r2,r5,r2
+
  00196b1c: a4400a74 sh r0,0x0a74(r2)             |
  00196b38: 00822021 addu r4,r4,r2
+
  00196b20: 90a30e2d lbu r3,0x0e2d(r5)             |{{f/load|Load AI 0xe2d}}
  00196b3c: 28c20012 slti r2,r6,0x0012
+
  00196b24: 24c60001 addiu r6,r6,0x0001           |{{f/std|Y counter + 1}}
  00196b40: 1440ffef bne r2,r0,0x00196b00
+
  00196b28: 000310c0 sll r2,r3,0x03               |
  00196b44: a4800a98 sh r0,0x0a98(r4)
+
  00196b2c: 00431021 addu r2,r2,r3                 |
  00196b48: 0000c821 addu r25,r0,r0
+
  00196b30: 000210c0 sll r2,r2,0x03               |{{f/std|0xe2d * 0x48}}
  00196b4c: 00a0c021 addu r24,r5,r0
+
  00196b34: 00a21021 addu r2,r5,r2                 |
  00196b50: 00a07821 addu r15,r5,r0
+
  00196b38: 00822021 addu r4,r4,r2                 |
  00196b54: 00007021 addu r14,r0,r0
+
  00196b3c: 28c20012 slti r2,r6,0x0012             |
 
+
  00196b40: 1440ffef bne r2,r0,0x00196b00     {{f/eloop|Do 18 (0x12) times}}
  <Loop Start>
+
  00196b44: a4800a98 sh r0,0x0a98(r4)             |{{f/adr|Dynamic pointer to this Y row in Table 0xa74 (matching 0xe2d)}} {{f/std|High elevation elevation}}
  00196b58: 90a20e3b lbu r2,0x0e3b(r5)
+
  00196b5c: 00000000 nop
+
  00196b48: 0000c821 addu r25,r0,r0           |{{f/std|Reset elevation counter}}
  00196b60: 18400032 blez r2,0x00196c2c
+
  00196b4c: 00a0c021 addu r24,r5,r0           |{{f/std|0x8019f3c4}}
  00196b64: 00004021 addu r8,r0,r0
+
  00196b50: 00a07821 addu r15,r5,r0           |{{f/std|0x8019f3c4}}
  00196b68: 01c06821 addu r13,r14,r0
+
  00196b54: 00007021 addu r14,r0,r0           |{{f/std|Initial elevation offset}}
  00196b6c: 00004821 addu r9,r0,r0
+
                                            {{f/bloop|LOOP - Both elevation}}
  00196b70: 270b03b4 addiu r11,r24,0x03b4
+
  00196b58: 90a20e3b lbu r2,0x0e3b(r5)             |{{f/load|Map max Y}}
  00196b74: 25ea0a74 addiu r10,r15,0x0a74
+
  00196b5c: 00000000 nop                           |
  00196b78: 95430000 lhu r3,0x0000(r10)
+
  00196b60: 18400032 blez r2,0x00196c2c           {{f/Cond|If Max Y is invalid : branch to }} {{f/loc|Next Elevation iteration}}
  00196b7c: 00000000 nop
+
  00196b64: 00004021 addu r8,r0,r0                 |{{f/std|Reset Y counter}}
  00196b80: 10600023 beq r3,r0,0x00196c10
+
  00196b68: 01c06821 addu r13,r14,r0               |{{f/std|Elevation offset (0x24)}}
  00196b84: 00000000 nop
+
  00196b6c: 00004821 addu r9,r0,r0                 |
  00196b88: 90a20e3a lbu r2,0x0e3a(r5)
+
  00196b70: 270b03b4 addiu r11,r24,0x03b4         |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+ elevation offset)}}
  00196b8c: 00000000 nop
+
  00196b74: 25ea0a74 addiu r10,r15,0x0a74         |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074 + elevation offset}} {{f/std| (offset 0x00 - not based on 0xe2d)}}
  00196b90: 1840001f blez r2,0x00196c10
+
                                                {{f/bloop|LOOP - All Y Rows}}
  00196b94: 00003021 addu r6,r0,r0
+
  00196b78: 95430000 lhu r3,0x0000(r10)               |{{f/load|This Y Row halfword of flags}} {{f/std| (offset 0x00 - not based on 0xe2d)}}
  00196b98: 00606021 addu r12,r3,r0
+
  00196b7c: 00000000 nop                               |
  00196b9c: 01603821 addu r7,r11,r0
+
  00196b80: 10600023 beq r3,r0,0x00196c10             {{f/Cond|If All Flags are OFF : branch to }} {{f/loc|Next Y}}
  00196ba0: 00cc1004 sllv r2,r12,r6
+
  00196b84: 00000000 nop                                   |
  00196ba4: 30428000 andi r2,r2,0x8000
+
  00196b88: 90a20e3a lbu r2,0x0e3a(r5)                 |{{f/load|Map Max X}}
  00196ba8: 10400014 beq r2,r0,0x00196bfc
+
  00196b8c: 00000000 nop                               |
  00196bac: 00000000 nop
+
  00196b90: 1840001f blez r2,0x00196c10               {{f/Cond|If Max X is invalid : branch to }} {{f/loc|Next Y}}
 
+
  00196b94: 00003021 addu r6,r0,r0                     |{{f/std|Reset X counter}}
<Find and Set Main Target>
+
  00196b98: 00606021 addu r12,r3,r0                   |{{f/std|Pass Y row's flags}}
  00196bb0: 90e20000 lbu r2,0x0000(r7) Get Unit ID
+
  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}}
  00196bb4: 00000000 nop
+
  00196bb8: 0222102a slt r2,r17,r2
+
                                                    {{f/bloop|LOOP - All X tiles in Y Rows}}
  00196bbc: 1440000f bne r2,r0,0x00196bfc Continue until Unit ID = Main Target ID
+
  00196ba0: 00cc1004 sllv r2,r12,r6                       |{{f/std|This Tile bit is in 0x8000 position}}
  00196bc0: 00000000 nop
+
  00196ba4: 30428000 andi r2,r2,0x8000                     |
  00196bc4: 90a30e2d lbu r3,0x0e2d(r5)
+
  00196ba8: 10400014 beq r2,r0,0x00196bfc                 {{f/Cond|if this Tile is not reachable : branch to }} {{f/loc|Next X}}
  00196bc8: 34100001 ori r16,r0,0x0001 Main Target Found = True
+
  00196bac: 00000000 nop                                   |
  00196bcc: 000310c0 sll r2,r3,0x03
+
  00196bb0: 90e20000 lbu r2,0x0000(r7)                     |{{f/load|This Tile distance to Acting unit's Target}}
  00196bd0: 00431021 addu r2,r2,r3
+
  00196bb4: 00000000 nop                                   |
  00196bd4: 000210c0 sll r2,r2,0x03
+
  00196bb8: 0222102a slt r2,r17,r2                         |{{f/std|0x1 if Preset Value < this Tile distance to Target}}
  00196bd8: 00451021 addu r2,r2,r5
+
  00196bbc: 1440000f bne r2,r0,0x00196bfc                 {{f/Cond|if Target is above Preset Value : branch to }} {{f/loc|Next X}}
  00196bdc: 24420a74 addiu r2,r2,0x0a74
+
  00196bc0: 00000000 nop                                   |
  00196be0: 01a21021 addu r2,r13,r2
+
  00196bc4: 90a30e2d lbu r3,0x0e2d(r5)                     |{{f/load|Load 0xe2d}}
  00196be4: 01221021 addu r2,r9,r2
+
  00196bc8: 34100001 ori r16,r0,0x0001                     |{{f/std|1 Tile in range Flag}}
  00196be8: 34038000 ori r3,r0,0x8000
+
  00196bcc: 000310c0 sll r2,r3,0x03                       |
  00196bec: 94440000 lhu r4,0x0000(r2)
+
  00196bd0: 00431021 addu r2,r2,r3                         |
  00196bf0: 00c31807 srav r3,r3,r6
+
  00196bd4: 000210c0 sll r2,r2,0x03                       |{{f/std|0xe2d Offset (0x48)}}
  00196bf4: 00832025 or r4,r4,r3
+
  00196bd8: 00451021 addu r2,r2,r5                         |
  00196bf8: a4440000 sh r4,0x0000(r2) Set Main Target
+
  00196bdc: 24420a74 addiu r2,r2,0x0a74                   |{{f/std|0x8019f3c4 + 0xa74 + 0xe2d offset}}
 
+
  00196be0: 01a21021 addu r2,r13,r2                       |{{f/std|+Elevation offset}}
  00196bfc: 90a20e3a lbu r2,0x0e3a(r5) map max x
+
  00196be4: 01221021 addu r2,r9,r2                         |{{f/std|+Y offset}}
  00196c00: 24c60001 addiu r6,r6,0x0001
+
  00196be8: 34038000 ori r3,r0,0x8000                     |{{f/std|Prepare Bitmask}}
  00196c04: 00c2102a slt r2,r6,r2
+
  00196bec: 94440000 lhu r4,0x0000(r2)                     |{{f/load|Load this Tile's Y row's flags}}
  00196c08: 1440ffe5 bne r2,r0,0x00196ba0
+
  00196bf0: 00c31807 srav r3,r3,r6                         |{{f/std|This Tile Bitmask}}
  00196c0c: 24e70001 addiu r7,r7,0x0001
+
  00196bf4: 00832025 or r4,r4,r3                           |
  00196c10: 25290002 addiu r9,r9,0x0002
+
  00196bf8: a4440000 sh r4,0x0000(r2)                     |{{f/store|Enable this Tile flag}}
  00196c14: 256b0010 addiu r11,r11,0x0010
+
  00196bfc: 90a20e3a lbu r2,0x0e3a(r5)                     |{{f/load|Map Max X}}
  00196c18: 90a20e3b lbu r2,0x0e3b(r5) map max y
+
  00196c00: 24c60001 addiu r6,r6,0x0001                   |{{f/std|X counter + 1}}
  00196c1c: 25080001 addiu r8,r8,0x0001
+
  00196c04: 00c2102a slt r2,r6,r2                         |
  00196c20: 0102102a slt r2,r8,r2
+
  00196c08: 1440ffe5 bne r2,r0,0x00196ba0             {{f/eloop|Loop while X < max X}}
  00196c24: 1440ffd4 bne r2,r0,0x00196b78
+
  00196c0c: 24e70001 addiu r7,r7,0x0001                   |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+0x01 each X iteration)}}
  00196c28: 254a0002 addiu r10,r10,0x0002
+
  00196c10: 25290002 addiu r9,r9,0x0002               |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074 + 0x2ed offset (+0x2 each Y iteration)}}
  00196c2c: 27180120 addiu r24,r24,0x0120
+
  00196c14: 256b0010 addiu r11,r11,0x0010             |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0x3b4  (+0x10 each Y iteration)}} {{f/std|0x10 each iteration}}
  00196c30: 25ef0024 addiu r15,r15,0x0024
+
  00196c18: 90a20e3b lbu r2,0x0e3b(r5)                 |{{f/load|Map Max Y}}
  00196c34: 27390001 addiu r25,r25,0x0001
+
  00196c1c: 25080001 addiu r8,r8,0x0001               |{{f/std|Y counter +1}}
  00196c38: 2b220002 slti r2,r25,0x0002
+
  00196c20: 0102102a slt r2,r8,r2                     |
  00196c3c: 1440ffc6 bne r2,r0,0x00196b58
+
  00196c24: 1440ffd4 bne r2,r0,0x00196b78         {{f/eloop|Loop while Y counter < Max Y}}
  00196c40: 25ce0024 addiu r14,r14,0x0024
+
  00196c28: 254a0002 addiu r10,r10,0x0002             |{{f/adr|Dynamic pointer to 0x8019f3c4 + 0xa074  (+0x2 each Y iteration)}} {{f/std|Table at offset 0x00}}
 
+
  00196c2c: 27180120 addiu r24,r24,0x0120         |{{f/std|Elevation offset for Table 0x3b4}}
  00196c44: 1600000b bne r16,r0,0x00196c74 Branch if Main Target was found
+
  00196c30: 25ef0024 addiu r15,r15,0x0024         |{{f/std|Elevation offset for Table 0xa74}}
  00196c48: 34020001 ori r2,r0,0x0001
+
  00196c34: 27390001 addiu r25,r25,0x0001         |{{f/std|Elevation counter +1}}
  00196c4c: 90a20e2d lbu r2,0x0e2d(r5)
+
  00196c38: 2b220002 slti r2,r25,0x0002           |
  00196c50: 34060048 ori r6,r0,0x0048
+
  00196c3c: 1440ffc6 bne r2,r0,0x00196b58     {{f/eloop|Loop 2 times}}
  00196c54: 000220c0 sll r4,r2,0x03
+
  00196c40: 25ce0024 addiu r14,r14,0x0024         |{{f/std|Elevation offset}}
  00196c58: 00822021 addu r4,r4,r2
+
  00196c5c: 000420c0 sll r4,r4,0x03
+
  00196c44: 1600000b bne r16,r0,0x00196c74     {{f/Cond|If At least One Tile Matches the Preset conditions}} {{f/loc|Exit }} {{f/Returns|Returns 0x01}}
  00196c60: 24840a74 addiu r4,r4,0x0a74
+
  00196c48: 34020001 ori r2,r0,0x0001             |
  00196c64: 00a42021 addu r4,r5,r4
+
                                            '''Else : No Tiles Found'''
  00196c68: 0c066ac2 jal 0x0019ab08
+
  00196c4c: 90a20e2d lbu r2,0x0e2d(r5)             |{{f/load|Laod 0xe2d}}
  00196c6c: 24a50a74 addiu r5,r5,0x0a74
+
  00196c50: 34060048 ori r6,r0,0x0048             |{{f/std|Send Size of data}}
  00196c70: 00001021 addu r2,r0,r0
+
  00196c54: 000220c0 sll r4,r2,0x03               |
 +
  00196c58: 00822021 addu r4,r4,r2                 |
 +
  00196c5c: 000420c0 sll r4,r4,0x03               |{{f/std|0xe2d Offset (0x48)}}
 +
  00196c60: 24840a74 addiu r4,r4,0x0a74           |
 +
  00196c64: 00a42021 addu r4,r5,r4                 |{{f/adr|0x8019f3c4 + 0xa74 + 0x2ed offset}}
 +
  00196c68: 0c066ac2 jal 0x0019ab08               |{{f/jal|Transfer Halfword Values|Transfer Halfword Values}} {{f/std|Transfer data from r5 to r4}}
 +
  00196c6c: 24a50a74 addiu r5,r5,0x0a74           |{{f/adr|0x8019f3c4 + 0xa74}}
 +
  00196c70: 00001021 addu r2,r0,r0                 |{{f/Returns|Return 0x00}}
 
  00196c74: 8fbf0028 lw r31,0x0028(r29)
 
  00196c74: 8fbf0028 lw r31,0x0028(r29)
 
  00196c78: 8fb10024 lw r17,0x0024(r29)
 
  00196c78: 8fb10024 lw r17,0x0024(r29)
Line 115: Line 122:
 
  00196c84: 03e00008 jr r31
 
  00196c84: 03e00008 jr r31
 
  00196c88: 00000000 nop
 
  00196c88: 00000000 nop
 +
===Return locations===
 +
'''BATTLE.BIN'''
 +
  00196680: [[Map_movement_decision/data_setting]]  Condition Value = Target distance -1 (one case)
 +
  00198420: [[001982d8_-_001984e8]]

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