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

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