Difference between revisions of "Calculate Tiles Hit by Ability"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with " Calculate Tiles Hit by Ability 00179518: 27bdffb8 addiu r29,r29,0xffb8 0017951c: afb40038 sw r20,0x0038(r29) 00179520: 0080a021 addu r20,r4,r0 r20 = AoE 00179524: 32820...")
 
m
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
+
'''00179518 - 00179638'''
  Calculate Tiles Hit by Ability
+
  '''Parameters''' : r4 = Ability AoE/ Range         
  00179518: 27bdffb8 addiu r29,r29,0xffb8
+
  0017951c: afb40038 sw r20,0x0038(r29)
+
This routine will spread the AoE out of the targeted tile (see [[#Notes|Notes]])
  00179520: 0080a021 addu r20,r4,r0 r20 = AoE
+
--------------------------------------------------------------------
  00179524: 328200ff andi r2,r20,0x00ff r2 = AoE
+
  00179518: 27bdffb8 addiu r29,r29,-0x0048    |
  00179528: afbf0040 sw r31,0x0040(r29)
+
  0017951c: afb40038 sw r20,0x0038(r29)       |
  0017952c: afb5003c sw r21,0x003c(r29)
+
  00179520: 0080a021 addu r20,r4,r0           |{{f/std|<nowiki>r20 = AoE</nowiki>}}
  00179530: afb30034 sw r19,0x0034(r29)
+
  00179524: 328200ff andi r2,r20,0x00ff       |{{f/std|<nowiki>r2 = AoE</nowiki>}}
  00179534: afb20030 sw r18,0x0030(r29)
+
  00179528: afbf0040 sw r31,0x0040(r29)       |
  00179538: afb1002c sw r17,0x002c(r29)
+
  0017952c: afb5003c sw r21,0x003c(r29)       |
  0017953c: 14400005 bne r2,r0,0x 00179554 Branch if AoE != 0
+
  00179530: afb30034 sw r19,0x0034(r29)       |
  00179540: afb00028 sw r16,0x0028(r29)
+
  00179534: afb20030 sw r18,0x0030(r29)       |
  00179544: 0c05e500 jal 0x 00179400 Null some Tile Data (192dd9)
+
  00179538: afb1002c sw r17,0x002c(r29)       |
  00179548: 00000000 nop
+
  0017953c: 14400005 bne r2,r0,0x00179554    {{f/Cond|<nowiki>If AoE = 0</nowiki>}} /Else avoid nullification and exit
  0017954c: 0805e585 j 0x 00179614
+
  00179540: afb00028 sw r16,0x0028(r29)           |{{f/store|<nowiki> </nowiki>}}
  00179550: 00000000 nop
+
  00179544: 0c05e500 jal 0x00179400                |{{f/jal|Null_some_Tile_Data_(192dd9)|<nowiki>Null_some_Tile_Data_(192dd9)</nowiki>}} Set all targetable panel's 0x01 flag to 0x00 (green flag)
  00179554: 34120001 ori r18,r0,0x0001 Tiles Left? = True
+
  00179548: 00000000 nop                           |
  00179558: 1040002e beq r2,r0,0x 00179614 Branch if AoE = 0
+
  0017954c: 0805e585 j 0x00179614                  {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki></nowiki>}}
  0017955c: 00009821 addu r19,r0,r0 AoE Counter = 0
+
  00179550: 00000000 nop                           |
  00179560: 3c158019 lui r21,0x8019
+
  00179554: 34120001 ori r18,r0,0x0001       {{f/Cond|<nowiki>Else (AoE <> 0)</nowiki>}} {{f/std|<nowiki>r18 = 0x01 (r18 is set to 0x00 when AoE is completely spread)</nowiki>}}
  00179564: 26b52dd8 addiu r21,r21,0x2dd8 r21 = ? Tile data pointer
+
  00179558: 1040002e beq r2,r0,0x00179614          {{f/Cond|<nowiki>If AoE <> 0 (redundant ?)</nowiki>}} / Else branch to {{f/loc|<nowiki>END</nowiki>}}
  00179568: 1240002a beq r18,r0,0x 00179614 Branch if Tiles Left? = False
+
  0017955c: 00009821 addu r19,r0,r0                   |{{f/std|<nowiki>r19 = 0x00 - AoE loop counter</nowiki>}}
  0017956c: 00009021 addu r18,r0,r0 Tiles Left? = False
+
  00179560: 3c158019 lui r21,0x8019                   |{{f/std|<nowiki>r21 = 0x80190000</nowiki>}}
  00179570: 3c02800e lui r2,0x800e
+
  00179564: 26b52dd8 addiu r21,r21,0x2dd8             |{{f/std|<nowiki>r21 = 0x801902dd8</nowiki>}} {{f/std|<nowiki>Moveable/Targetable Panel Grid</nowiki>}}
  00179574: 90424ea0 lbu r2,0x4ea0(r2) Load Map Max Y
+
  00179568: 1240002a beq r18,r0,0x00179614            {{f/bloop|<nowiki>LOOP Spread AoE</nowiki>}} {{f/Cond|<nowiki>If r18 <> 0x00</nowiki>}} / Else branch to {{f/loc|<nowiki>END</nowiki>}}
  00179578: 00000000 nop
+
  0017956c: 00009021 addu r18,r0,r0                       |{{f/std|<nowiki>r18 = 0</nowiki>}}
  0017957c: 18400020 blez r2,0x 00179600 Branch if Y <= 0
+
  00179570: 3c02800e lui r2,0x800e                         |{{f/std|<nowiki>r2 =0x800e0000</nowiki>}}
  00179580: 00008821 addu r17,r0,r0 Y Counter = 0
+
  00179574: 90424ea0 lbu r2,0x4ea0(r2)                     |{{f/load|<nowiki>r2 = Max Map Y</nowiki>}}
  00179584: 3c03800e lui r3,0x800e
+
  00179578: 00000000 nop                                   |
  00179588: 90634e9c lbu r3,0x4e9c(r3) Load Map Max X
+
  0017957c: 18400020 blez r2,0x00179600                    {{f/Cond|<nowiki>If Map Max Y > 0x00</nowiki>}} /Else branch to next loop 1 iteration
  0017958c: 00000000 nop
+
  00179580: 00008821 addu r17,r0,r0                       |{{f/std|<nowiki>r17 = 0x00 (Y Counter)</nowiki>}}
  00179590: 10600015 beq r3,r0,0x 001795e8 Branch if X = 0
+
  00179584: 3c03800e lui r3,0x800e                             {{f/bloop|<nowiki>LOOP through Y coord</nowiki>}} {{f/std|<nowiki>r3 = 0x800e0000</nowiki>}}
  00179594: 00008021 addu r16,r0,r0 X Counter = 0
+
  00179588: 90634e9c lbu r3,0x4e9c(r3)                             |{{f/load|<nowiki>r3 = Map Max X</nowiki>}}
  00179598: 02230018 mult r17,r3 YC * Map X
+
  0017958c: 00000000 nop                                           |
  0017959c: 00001012 mflo r2
+
  00179590: 10600015 beq r3,r0,0x001795e8                          {{f/Cond|<nowiki>If Map Max X <> 0x00</nowiki>}}
  001795a0: 00501021 addu r2,r2,r16 YC * Map X + XC
+
  00179594: 00008021 addu r16,r0,r0                               |{{f/std|<nowiki>r16 = 0x00 (X Counter)</nowiki>}}
  001795a4: 00021880 sll r3,r2,0x02 (YC * Map X + X) * 4
+
  00179598: 02230018 mult r17,r3                                   |{{f/std|<nowiki>Y Counter * Max X</nowiki>}}
  001795a8: 00621821 addu r3,r3,r2 Tile ID = (YC * Map X + X) * 5
+
  0017959c: 00001012 mflo r2                                       {{f/bloop|<nowiki>LOOP through X coord</nowiki>}} {{f/std|<nowiki>r2 = Y counter * Max X</nowiki>}}
  001795ac: 00751821 addu r3,r3,r21
+
  001795a0: 00501021 addu r2,r2,r16                                   |{{f/std|<nowiki>r2 = Y Counter * Max X + X Counter (= Tile ID without elevation)</nowiki>}}
  001795b0: 90620001 lbu r2,0x0001(r3) Load Tile's Targeted Flag?
+
  001795a4: 00021880 sll r3,r2,0x02                                   |{{f/std|<nowiki>r3 = Tile ID *4</nowiki>}}
  001795b4: 00000000 nop
+
  001795a8: 00621821 addu r3,r3,r2                                     |{{f/std|<nowiki>r3 = Tile ID *5</nowiki>}}
  001795b8: 10400005 beq r2,r0,0x 001795d0 Branch if Targeted Flag? = 0
+
  001795ac: 00751821 addu r3,r3,r21                                   |{{f/std|<nowiki>r3 = Tile ID *5 + Targetable grid offset</nowiki>}}
  001795bc: 02202021 addu r4,r17,r0 r4 = Y Counter
+
  001795b0: 90620001 lbu r2,0x0001(r3)                                 |{{f/load|<nowiki>r2 = Targetable grid panel 0x01 data corresponding to tile ID</nowiki>}}
  001795c0: a0600001 sb r0,0x0001(r3) Store Tile's Targeted Flag? = 0
+
  001795b4: 00000000 nop                                               |
  001795c4: 0c05e58f jal 0x 0017963c Calculate Possible AoE Tiles
+
  001795b8: 10400005 beq r2,r0,0x001795d0                              {{f/Cond|<nowiki>If pannel is targeted (=0x01)</nowiki>}} /Else branch
  001795c8: 02002821 addu r5,r16,r0 r5 = X Counter
+
  001795bc: 02202021 addu r4,r17,r0                                       |{{f/std|<nowiki>r4 = Y Counter (Y coord of tile matching targeted panel)</nowiki>}}
  001795cc: 02429021 addu r18,r18,r2 Tiles Left? += returned Tile's Left?
+
  001795c0: a0600001 sb r0,0x0001(r3)                                     |{{f/store|<nowiki>Store 0x00 at panel 0x01 (Remove Targeting flag)</nowiki>}}
  001795d0: 3c03800e lui r3,0x800e
+
  001795c4: 0c05e58f jal 0x0017963c                                        |{{f/jal|Calculate_Possible_AoE_Tiles|<nowiki>Calculate_Possible_AoE_Tiles</nowiki>}} Spread AoE in surrounding tiles, return r2 = 0x01 is AoE is not ended
  001795d4: 90634e9c lbu r3,0x4e9c(r3) Load Map Max X
+
  001795c8: 02002821 addu r5,r16,r0                                       |{{f/std|<nowiki>r5 = X Counter (X coord of tile matching targeted panel)</nowiki>}}
  001795d8: 26100001 addiu r16,r16,0x0001 X Counter ++
+
  001795cc: 02429021 addu r18,r18,r2                                       |{{f/std|<nowiki>r18 = 0x01 if AoE need to spread again</nowiki>}}
  001795dc: 0203102a slt r2,r16,r3
+
  001795d0: 3c03800e lui r3,0x800e                                     |{{f/std|<nowiki>r3 = 0x800e0000</nowiki>}}
  001795e0: 1440ffee bne r2,r0,0x 0017959c Branch if X Counter < Max X
+
  001795d4: 90634e9c lbu r3,0x4e9c(r3)                                 |{{f/load|<nowiki>r3 = Map Max X</nowiki>}}
  001795e4: 02230018 mult r17,r3 Y Counter * Max X
+
  001795d8: 26100001 addiu r16,r16,0x0001                             |{{f/std|<nowiki>r16 = X Counter + 1</nowiki>}}
  001795e8: 3c02800e lui r2,0x800e
+
  001795dc: 0203102a slt r2,r16,r3                                     |{{f/std|<nowiki>r3 = 0x01 if counter < Map Max X</nowiki>}}
  001795ec: 90424ea0 lbu r2,0x4ea0(r2) Load Map Max Y
+
  001795e0: 1440ffee bne r2,r0,0x0017959c                          {{f/eloop|<nowiki>Loop while X counter < Map Max X</nowiki>}}
  001795f0: 26310001 addiu r17,r17,0x0001 Y Counter ++
+
  001795e4: 02230018 mult r17,r3                                       |{{f/std|<nowiki>Y Counter * Max X (mflo at the beginning of the loop)</nowiki>}}
  001795f4: 0222102a slt r2,r17,r2
+
  001795e8: 3c02800e lui r2,0x800e                                 |{{f/std|<nowiki>r2 = 0x800e0000</nowiki>}}
  001795f8: 1440ffe2 bne r2,r0,0x 00179584 Branch if Y Counter < Max Y
+
  001795ec: 90424ea0 lbu r2,0x4ea0(r2)                             |{{f/load|<nowiki>r2 = Map Max Y</nowiki>}}
  001795fc: 00000000 nop
+
  001795f0: 26310001 addiu r17,r17,0x0001                         |{{f/std|<nowiki>r1 = Y counter + 1</nowiki>}}
  00179600: 26730001 addiu r19,r19,0x0001 AoE Counter ++
+
  001795f4: 0222102a slt r2,r17,r2                                 |{{f/std|<nowiki>r2 = 0x01 If Y Counter < Max Y</nowiki>}}
  00179604: 328200ff andi r2,r20,0x00ff r2 = AoE
+
  001795f8: 1440ffe2 bne r2,r0,0x00179584                      {{f/eloop|<nowiki>Loop while Y counter < max Y</nowiki>}}
  00179608: 0262102a slt r2,r19,r2
+
  001795fc: 00000000 nop                                           |{{f/std|<nowiki> </nowiki>}}
  0017960c: 1440ffd6 bne r2,r0,0x 00179568 Branch if AoE Counter < AoE
+
  00179600: 26730001 addiu r19,r19,0x0001                 |{{f/std|<nowiki>r19 = AoE counter + 1</nowiki>}}
  00179610: 00000000 nop
+
  00179604: 328200ff andi r2,r20,0x00ff                   |{{f/std|<nowiki>r2 = Base AoE</nowiki>}}
  00179614: 8fbf0040 lw r31,0x0040(r29)
+
  00179608: 0262102a slt r2,r19,r2                         |{{f/std|<nowiki>r2 = 0x01 While Counter < AoE value</nowiki>}}
  00179618: 8fb5003c lw r21,0x003c(r29)
+
  0017960c: 1440ffd6 bne r2,r0,0x00179568              {{f/eloop|<nowiki>Loop until AoE is spread</nowiki>}}
  0017961c: 8fb40038 lw r20,0x0038(r29)
+
  00179610: 00000000 nop                               |{{f/std|<nowiki> </nowiki>}}
  00179620: 8fb30034 lw r19,0x0034(r29)
+
  00179614: 8fbf0040 lw r31,0x0040(r29)               |
  00179624: 8fb20030 lw r18,0x0030(r29)
+
  00179618: 8fb5003c lw r21,0x003c(r29)               |
  00179628: 8fb1002c lw r17,0x002c(r29)
+
  0017961c: 8fb40038 lw r20,0x0038(r29)               |
  0017962c: 8fb00028 lw r16,0x0028(r29)
+
  00179620: 8fb30034 lw r19,0x0034(r29)               |
  00179630: 27bd0048 addiu r29,r29,0x0048
+
  00179624: 8fb20030 lw r18,0x0030(r29)               |
  00179634: 03e00008 jr r31
+
  00179628: 8fb1002c lw r17,0x002c(r29)               |
  00179638: 00000000 nop
+
  0017962c: 8fb00028 lw r16,0x0028(r29)               |
 +
  00179630: 27bd0048 addiu r29,r29,0x0048             |
 +
  00179634: 03e00008 jr r31                           |
 +
  00179638: 00000000 nop                               |
 +
=== Notes ===
 +
This routine will spread the AoE around the targeted tile.
 +
It will use the  targetable grid to store AoE (0x00) and targeted status (0x01)
 +
Each time the AoE spread, it will decrease the AoE value stored in the panel 0x00 by one. (via [[Calculate_Possible_AoE_Tiles]])
 +
 +
1st Loop : test each panel of the targetable grid. Each iteration of this loop increase a counter.Loop occurs while counter < Base AoE value
 +
While looping each X coord is tested for each Y coord (elevation is handled in [[Calculate_Possible_AoE_Tiles]])
 +
If the targeted flag is ON (panel 0x01 <> 0x00) AoE spreads via [[Calculate_Possible_AoE_Tiles]] and Targeted flag is turned OFF
 +
 +
Note : this is [[Calculate_Possible_AoE_Tiles]] routine which set the targeted flag ON, while there's still AoE to spread.
 +
 +
Rq : if thoses infos are not deleted before the formula execution, the AoE value could be used for decreasing damage, or allow evasion
 +
=== Return location ===
 +
00179b14: [[Set_targeting_for_weapon_attack%3F]]
 +
00179fa4: [[Set_Ability_Targeting%3F]]
 +
0017a1f0: [[Calculate_ability_range_with_map_parameters%3F]]
 +
0017a444: [[Set_panels_affected_by_ability%3F]]
 +
0017badc: [[Targeting_routine]]

Latest revision as of 12:16, 4 June 2024

00179518 - 00179638
Parameters : r4 = Ability AoE/ Range          

This routine will spread the AoE out of the targeted tile (see Notes)
--------------------------------------------------------------------
00179518: 27bdffb8 addiu r29,r29,-0x0048    |
0017951c: afb40038 sw r20,0x0038(r29)       |
00179520: 0080a021 addu r20,r4,r0           |r20 = AoE 
00179524: 328200ff andi r2,r20,0x00ff       |r2 = AoE 
00179528: afbf0040 sw r31,0x0040(r29)       |
0017952c: afb5003c sw r21,0x003c(r29)       |
00179530: afb30034 sw r19,0x0034(r29)       |
00179534: afb20030 sw r18,0x0030(r29)       |
00179538: afb1002c sw r17,0x002c(r29)       |
0017953c: 14400005 bne r2,r0,0x00179554     #If AoE = 0 /Else avoid nullification and exit
00179540: afb00028 sw r16,0x0028(r29)            | 
00179544: 0c05e500 jal 0x00179400                |-->Null_some_Tile_Data_(192dd9) Set all targetable panel's 0x01 flag to 0x00 (green flag)
00179548: 00000000 nop                           |
0017954c: 0805e585 j 0x00179614                  >>Jump to END
00179550: 00000000 nop                           |
00179554: 34120001 ori r18,r0,0x0001        #Else (AoE <> 0) r18 = 0x01 (r18 is set to 0x00 when AoE is completely spread)
00179558: 1040002e beq r2,r0,0x00179614          #If AoE <> 0 (redundant ?) / Else branch to END
0017955c: 00009821 addu r19,r0,r0                    |r19 = 0x00 - AoE loop counter
00179560: 3c158019 lui r21,0x8019                    |r21 = 0x80190000
00179564: 26b52dd8 addiu r21,r21,0x2dd8              |r21 = 0x801902dd8 Moveable/Targetable Panel Grid
00179568: 1240002a beq r18,r0,0x00179614             @LOOP Spread AoE #If r18 <> 0x00 / Else branch to END
0017956c: 00009021 addu r18,r0,r0                        |r18 = 0
00179570: 3c02800e lui r2,0x800e                         |r2 =0x800e0000
00179574: 90424ea0 lbu r2,0x4ea0(r2)                     |r2 = Max Map Y
00179578: 00000000 nop                                   |
0017957c: 18400020 blez r2,0x00179600                    #If Map Max Y > 0x00 /Else branch to next loop 1 iteration
00179580: 00008821 addu r17,r0,r0                        |r17 = 0x00 (Y Counter)
00179584: 3c03800e lui r3,0x800e                             @LOOP through Y coord r3 = 0x800e0000
00179588: 90634e9c lbu r3,0x4e9c(r3)                             |r3 = Map Max X
0017958c: 00000000 nop                                           |
00179590: 10600015 beq r3,r0,0x001795e8                          #If Map Max X <> 0x00
00179594: 00008021 addu r16,r0,r0                                |r16 = 0x00 (X Counter)
00179598: 02230018 mult r17,r3                                   |Y Counter * Max X
0017959c: 00001012 mflo r2                                       @LOOP through X coord r2 = Y counter * Max X
001795a0: 00501021 addu r2,r2,r16                                    |r2 = Y Counter * Max X + X Counter (= Tile ID without elevation)
001795a4: 00021880 sll r3,r2,0x02                                    |r3 = Tile ID *4
001795a8: 00621821 addu r3,r3,r2                                     |r3 = Tile ID *5
001795ac: 00751821 addu r3,r3,r21                                    |r3 = Tile ID *5 + Targetable grid offset
001795b0: 90620001 lbu r2,0x0001(r3)                                 |r2 = Targetable grid panel 0x01 data corresponding to tile ID
001795b4: 00000000 nop                                               |
001795b8: 10400005 beq r2,r0,0x001795d0                              #If pannel is targeted (=0x01) /Else branch
001795bc: 02202021 addu r4,r17,r0                                        |r4 = Y Counter (Y coord of tile matching targeted panel)
001795c0: a0600001 sb r0,0x0001(r3)                                      |Store 0x00 at panel 0x01 (Remove Targeting flag)
001795c4: 0c05e58f jal 0x0017963c                                        |-->Calculate_Possible_AoE_Tiles Spread AoE in surrounding tiles, return r2 = 0x01 is AoE is not ended
001795c8: 02002821 addu r5,r16,r0                                        |r5 = X Counter (X coord of tile matching targeted panel)
001795cc: 02429021 addu r18,r18,r2                                       |r18 = 0x01 if AoE need to spread again
001795d0: 3c03800e lui r3,0x800e                                     |r3 = 0x800e0000
001795d4: 90634e9c lbu r3,0x4e9c(r3)                                 |r3 = Map Max X
001795d8: 26100001 addiu r16,r16,0x0001                              |r16 = X Counter + 1
001795dc: 0203102a slt r2,r16,r3                                     |r3 = 0x01 if counter < Map Max X
001795e0: 1440ffee bne r2,r0,0x0017959c                          Λ Loop while X counter < Map Max X
001795e4: 02230018 mult r17,r3                                       |Y Counter * Max X (mflo at the beginning of the loop)
001795e8: 3c02800e lui r2,0x800e                                 |r2 = 0x800e0000
001795ec: 90424ea0 lbu r2,0x4ea0(r2)                             |r2 = Map Max Y
001795f0: 26310001 addiu r17,r17,0x0001                          |r1 = Y counter + 1
001795f4: 0222102a slt r2,r17,r2                                 |r2 = 0x01 If Y Counter < Max Y
001795f8: 1440ffe2 bne r2,r0,0x00179584                      Λ Loop while Y counter < max Y
001795fc: 00000000 nop                                           | 
00179600: 26730001 addiu r19,r19,0x0001                  |r19 = AoE counter + 1
00179604: 328200ff andi r2,r20,0x00ff                    |r2 = Base AoE
00179608: 0262102a slt r2,r19,r2                         |r2 = 0x01 While Counter < AoE value
0017960c: 1440ffd6 bne r2,r0,0x00179568              Λ Loop until AoE is spread
00179610: 00000000 nop                               | 
00179614: 8fbf0040 lw r31,0x0040(r29)                |
00179618: 8fb5003c lw r21,0x003c(r29)                |
0017961c: 8fb40038 lw r20,0x0038(r29)                |
00179620: 8fb30034 lw r19,0x0034(r29)                |
00179624: 8fb20030 lw r18,0x0030(r29)                |
00179628: 8fb1002c lw r17,0x002c(r29)                |
0017962c: 8fb00028 lw r16,0x0028(r29)                |
00179630: 27bd0048 addiu r29,r29,0x0048              |
00179634: 03e00008 jr r31                            |
00179638: 00000000 nop                               |

Notes

This routine will spread the AoE around the targeted tile.
It will use the  targetable grid to store AoE (0x00) and targeted status (0x01)
Each time the AoE spread, it will decrease the AoE value stored in the panel 0x00 by one. (via Calculate_Possible_AoE_Tiles)

1st Loop : test each panel of the targetable grid. Each iteration of this loop increase a counter.Loop occurs while counter < Base AoE value
While looping each X coord is tested for each Y coord (elevation is handled in Calculate_Possible_AoE_Tiles)
If the targeted flag is ON (panel 0x01 <> 0x00) AoE spreads via Calculate_Possible_AoE_Tiles and Targeted flag is turned OFF

Note : this is Calculate_Possible_AoE_Tiles routine which set the targeted flag ON, while there's still AoE to spread.

Rq : if thoses infos are not deleted before the formula execution, the AoE value could be used for decreasing damage, or allow evasion

Return location

00179b14: Set_targeting_for_weapon_attack?
00179fa4: Set_Ability_Targeting? 
0017a1f0: Calculate_ability_range_with_map_parameters?
0017a444: Set_panels_affected_by_ability?
0017badc: Targeting_routine