Difference between revisions of "Select Random Tile For Random Fire Abilities"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m (link)
Line 1: Line 1:
<font face='Courier New'>
+
'''0017d708 - 0017d84c'''
 
   
 
   
  0017d708: 27bdffe0 addiu r29,r29,0xffe0
+
This routine select a random tile among Tiles which have their "green panel" flag at byte [0x05]
  0017d70c: afb00010 sw r16,0x0010(r29)
+
Rq : the 1st loop is a bit odd, using the targetable panels 0x01 byte to host Tile ID value (not matching the panel ID)
  0017d710: 00008021 addu r16,r0,r0
+
-------------------------------------------------------------------------------------------------------------------------------
  0017d714: 00002821 addu r5,r0,r0
+
  0017d708: 27bdffe0 addiu r29,r29,-0x0020    |
  0017d718: 34090100 ori r9,r0,0x0100
+
  0017d70c: afb00010 sw r16,0x0010(r29)       |
  0017d71c: 3c088019 lui r8,0x8019
+
  0017d710: 00008021 addu r16,r0,r0           |{{f/std|<nowiki>r16 = 0x00</nowiki>}} {{f/std|<nowiki>green panel counter</nowiki>}}
  0017d720: 25082dd8 addiu r8,r8,0x2dd8
+
  0017d714: 00002821 addu r5,r0,r0           |{{f/std|<nowiki>r5 = 0x00</nowiki>}}
  0017d724: 3c068019 lui r6,0x8019
+
  0017d718: 34090100 ori r9,r0,0x0100         |{{f/std|<nowiki>r9 = 0x100</nowiki>}}
  0017d728: 24c6f8cc addiu r6,r6,0xf8cc
+
  0017d71c: 3c088019 lui r8,0x8019           |{{f/std|<nowiki>r8 = 0x80190000</nowiki>}}
  0017d72c: 00003821 addu r7,r0,r0
+
  0017d720: 25082dd8 addiu r8,r8,0x2dd8       |{{f/adr|<nowiki>r8 = Targetable grid data pointer</nowiki>}} {{f/std|<nowiki> 0x80192dd8</nowiki>}}
  0017d730: afbf0018 sw r31,0x0018(r29)
+
  0017d724: 3c068019 lui r6,0x8019           |{{f/std|<nowiki>r6 = 0x8019</nowiki>}}
  0017d734: afb10014 sw r17,0x0014(r29)
+
  0017d728: 24c6f8cc addiu r6,r6,-0x0734      |{{f/adr|<nowiki>r6 = Tile data pointer</nowiki>}} {{f/std|<nowiki> 0x8018f8cc</nowiki>}}
  0017d738: 14a90002 bne r5,r9,0x0017d744
+
  0017d72c: 00003821 addu r7,r0,r0           |{{f/std|<nowiki>r7 = 0x00 (Targetable panel data counter)</nowiki>}}
  0017d73c: 00000000 nop
+
  0017d730: afbf0018 sw r31,0x0018(r29)       |
  0017d740: 02008821 addu r17,r16,r0
+
  0017d734: afb10014 sw r17,0x0014(r29)       |
  0017d744: 90c40005 lbu r4,0x0005(r6)
+
  0017d738: 14a90002 bne r5,r9,0x0017d744     {{f/bloop|<nowiki> LOOP</nowiki>}} {{f/Cond|<nowiki>If This iteration Tile is 0x100</nowiki>}} {{f/std|Loop though all tiles}}
  0017d748: 00000000 nop
+
  0017d73c: 00000000 nop                               |{{f/std|<nowiki> </nowiki>}}
  0017d74c: 30820080 andi r2,r4,0x0080
+
  0017d740: 02008821 addu r17,r16,r0                   |{{f/std|<nowiki>r17 = green panel counter, low elevation tiles only</nowiki>}}
  0017d750: 10400006 beq r2,r0,0x0017d76c
+
  0017d744: 90c40005 lbu r4,0x0005(r6)             |{{f/load|<nowiki>r4 = This iteration Tile [0x05]</nowiki>}}
  0017d754: 00e81821 addu r3,r7,r8
+
  0017d748: 00000000 nop                           |
  0017d758: 24e70005 addiu r7,r7,0x0005
+
  0017d74c: 30820080 andi r2,r4,0x0080             |{{f/std|<nowiki>r2 = 0x80 if this Tile has "green panel" flag ON</nowiki>}}
  0017d75c: 26100001 addiu r16,r16,0x0001
+
  0017d750: 10400006 beq r2,r0,0x0017d76c         {{f/Cond|<nowiki>If This Tile has green panel</nowiki>}}
  0017d760: 3082007f andi r2,r4,0x007f
+
  0017d754: 00e81821 addu r3,r7,r8                 |{{f/std|<nowiki>r3 = Targetable panel data pointer</nowiki>}}
  0017d764: a0c20005 sb r2,0x0005(r6)
+
  0017d758: 24e70005 addiu r7,r7,0x0005               |{{f/std|<nowiki>r7 = Targetable panel counter + 0x05 (size of panel data)</nowiki>}} not every iteration panel and tile do not match !! It's using panels 0x01 as a stack pointer
  0017d768: a0650001 sb r5,0x0001(r3)
+
  0017d75c: 26100001 addiu r16,r16,0x0001             |{{f/std|<nowiki>r16 = green panel counter + 1</nowiki>}}
  0017d76c: 24a50001 addiu r5,r5,0x0001
+
  0017d760: 3082007f andi r2,r4,0x007f                 |{{f/std|<nowiki>r2 = r4 without "green panel" flag</nowiki>}}
  0017d770: 28a20200 slti r2,r5,0x0200
+
  0017d764: a0c20005 sb r2,0x0005(r6)                 |{{f/store|<nowiki>Update this Tile [0x05] without "green panel" flag</nowiki>}}
  0017d774: 1440fff0 bne r2,r0,0x0017d738
+
  0017d768: a0650001 sb r5,0x0001(r3)                 |{{f/store|<nowiki>Store loop counter (TIle ID) on Panel [0x01] byte </nowiki>}}
  0017d778: 24c60008 addiu r6,r6,0x0008
+
  0017d76c: 24a50001 addiu r5,r5,0x0001           |{{f/std|<nowiki>r5 = loop counter + 1</nowiki>}}
  0017d77c: 0c0088c3 jal 0x0002230c
+
  0017d770: 28a20200 slti r2,r5,0x0200             |{{f/std|<nowiki>r2 = 0x01 if counter < 0x200</nowiki>}}
  0017d780: 00000000 nop
+
  0017d774: 1440fff0 bne r2,r0,0x0017d738     {{f/eloop|<nowiki>loop while counter < 0x200</nowiki>}}
  0017d784: 00500018 mult r2,r16
+
  0017d778: 24c60008 addiu r6,r6,0x0008           |{{f/std|<nowiki>r6 = Tile data pointer + 0x08</nowiki>}}
  0017d788: 00001812 mflo r3
+
  0017d77c: 0c0088c3 jal 0x0002230c           |{{f/jal|Random_Number_Generator|<nowiki>Random_Number_Generator</nowiki>}} return r2 = random halfword (0 to 0x7fff)
  0017d78c: 04610002 bgez r3,0x0017d798
+
  0017d780: 00000000 nop                     |
  0017d790: 00000000 nop
+
  0017d784: 00500018 mult r2,r16             |{{f/std|<nowiki>Random * green panel counter</nowiki>}}
  0017d794: 24637fff addiu r3,r3,0x7fff
+
  0017d788: 00001812 mflo r3                 |{{f/std|<nowiki>r3 = Random * green panel counter</nowiki>}}
  0017d798: 00031bc3 sra r3,r3,0x0f
+
  0017d78c: 04610002 bgez r3,0x0017d798       {{f/Cond|<nowiki>If r3 < 0x00 (random number was < 0x00)</nowiki>}} {{f/std|<nowiki>never true</nowiki>}}
  0017d79c: 00031080 sll r2,r3,0x02
+
  0017d790: 00000000 nop                     |
  0017d7a0: 00431021 addu r2,r2,r3
+
  0017d794: 24637fff addiu r3,r3,0x7fff           |{{f/std|<nowiki>r3 = random positive (security ?)</nowiki>}}
  0017d7a4: 3c018019 lui r1,0x8019
+
  0017d798: 00031bc3 sra r3,r3,0x0f           |{{f/std|<nowiki>r3 =  random from 0x00 to green panel counter = random panel </nowiki>}}
  0017d7a8: 00220821 addu r1,r1,r2
+
  0017d79c: 00031080 sll r2,r3,0x02           |{{f/std|<nowiki>r2 = random panel * 4</nowiki>}}
  0017d7ac: 90242dd9 lbu r4,0x2dd9(r1)
+
  0017d7a0: 00431021 addu r2,r2,r3           |{{f/std|<nowiki>r2 = random panel * 5 (panel offset)</nowiki>}}
  0017d7b0: 0071182a slt r3,r3,r17
+
  0017d7a4: 3c018019 lui r1,0x8019           |{{f/std|<nowiki>r1 = 0x80190000</nowiki>}}
  0017d7b4: 14600003 bne r3,r0,0x0017d7c4
+
  0017d7a8: 00220821 addu r1,r1,r2           |{{f/std|<nowiki>r1 = 0x80190000 + random panel offset</nowiki>}}
  0017d7b8: 000410c0 sll r2,r4,0x03
+
  0017d7ac: 90242dd9 lbu r4,0x2dd9(r1)       |{{f/load|<nowiki>r4 = Random panel [0x01] byte (hold loop counter value which is tile ID)</nowiki>}} {{f/std|<nowiki> 0x80192dd8 + 0x01</nowiki>}}
  0017d7bc: 24840100 addiu r4,r4,0x0100
+
  0017d7b0: 0071182a slt r3,r3,r17           |{{f/std|<nowiki>r3 = 0x01 if random panel is low elevation</nowiki>}}
  0017d7c0: 000410c0 sll r2,r4,0x03
+
  0017d7b4: 14600003 bne r3,r0,0x0017d7c4     {{f/Cond|<nowiki>If random panel is on high elevation</nowiki>}}
  0017d7c4: 3c018019 lui r1,0x8019
+
  0017d7b8: 000410c0 sll r2,r4,0x03           |{{f/std|<nowiki>r2 = Random Tile ID * 8</nowiki>}}
  0017d7c8: 00220821 addu r1,r1,r2
+
  0017d7bc: 24840100 addiu r4,r4,0x0100           |{{f/std|<nowiki>r4 = Random Tile ID + higher elevation offset</nowiki>}}
  0017d7cc: 9023f8d1 lbu r3,-0x072f(r1)
+
  0017d7c0: 000410c0 sll r2,r4,0x03               |{{f/std|<nowiki>r2 = Random Higher Tile ID * 8</nowiki>}}
  0017d7d0: 00000000 nop
+
  0017d7c4: 3c018019 lui r1,0x8019           |{{f/std|<nowiki>r1 = 0x80190000</nowiki>}}
  0017d7d4: 34630080 ori r3,r3,0x0080
+
  0017d7c8: 00220821 addu r1,r1,r2           |{{f/std|<nowiki>r1 = 0x80190000 + Random tile offset</nowiki>}}
  0017d7d8: 3c018019 lui r1,0x8019
+
  0017d7cc: 9023f8d1 lbu r3,-0x072f(r1)       |{{f/load|<nowiki>r3 = Random Tile byte  [0x05] value</nowiki>}} {{f/std|<nowiki>0x8018f8cc + 0x05</nowiki>}}
  0017d7dc: 00220821 addu r1,r1,r2
+
  0017d7d0: 00000000 nop                     |
  0017d7e0: a023f8d1 sb r3,-0x072f(r1)
+
  0017d7d4: 34630080 ori r3,r3,0x0080         |{{f/std|<nowiki>r3 = Random Tile [0x05] + green panel flag</nowiki>}}
  0017d7e4: 34020001 ori r2,r0,0x0001
+
  0017d7d8: 3c018019 lui r1,0x8019           |{{f/std|<nowiki>r1 = 0x80190000</nowiki>}}
  0017d7e8: 3c018019 lui r1,0x8019
+
  0017d7dc: 00220821 addu r1,r1,r2           |{{f/std|<nowiki>r1 = 0x80190000 + Random tile offset</nowiki>}}
  0017d7ec: a022390f sb r2,0x390f(r1)
+
  0017d7e0: a023f8d1 sb r3,-0x072f(r1)       |{{f/store|<nowiki>Store random tile [0x05] byte updated with green panel flag (0x80)</nowiki>}}
  0017d7f0: 04810002 bgez r4,0x0017d7fc
+
  0017d7e4: 34020001 ori r2,r0,0x0001         |{{f/std|<nowiki>r2 = 0x01</nowiki>}}
  0017d7f4: 00802821 addu r5,r4,r0
+
  0017d7e8: 3c018019 lui r1,0x8019           |{{f/std|<nowiki>r1 = 0x80190000</nowiki>}}
  0017d7f8: 248500ff addiu r5,r4,0x00ff
+
  0017d7ec: a022390f sb r2,0x390f(r1)         |{{f/store|<nowiki>Store 0x01 at 0x8019390f</nowiki>}} {{f/std|<nowiki> 8019390f</nowiki>}}
  0017d7fc: 3c03800e lui r3,0x800e
+
  0017d7f0: 04810002 bgez r4,0x0017d7fc       {{f/Cond|<nowiki>If random Tile ID  <0x00</nowiki>}} {{f/std|<nowiki>???</nowiki>}}
  0017d800: 90634e9c lbu r3,0x4e9c(r3)
+
  0017d7f4: 00802821 addu r5,r4,r0           |{{f/std|<nowiki>r5 = random tile ID</nowiki>}}
  0017d804: 308200ff andi r2,r4,0x00ff
+
  0017d7f8: 248500ff addiu r5,r4,0x00ff           |{{f/std|<nowiki>r5 = random tile ID + 0x00ff</nowiki>}}
  0017d808: 0043001a div r2,r3
+
  0017d7fc: 3c03800e lui r3,0x800e           |{{f/std|<nowiki>r3 = 0x800e</nowiki>}}
  0017d80c: 00001012 mflo r2
+
  0017d800: 90634e9c lbu r3,0x4e9c(r3)       |{{f/load|<nowiki>r3 = Map Max X</nowiki>}}
  0017d810: 00002010 mfhi r4
+
  0017d804: 308200ff andi r2,r4,0x00ff       |{{f/std|<nowiki>r2 = low elevation Tile ID</nowiki>}}
  0017d814: 00051a03 sra r3,r5,0x08
+
  0017d808: 0043001a div r2,r3               |{{f/std|<nowiki>low elevation ID / map Max X</nowiki>}}
  0017d818: 3c018019 lui r1,0x8019
+
  0017d80c: 00001012 mflo r2                 |{{f/std|<nowiki>r2 = Random Tile Y coord</nowiki>}}
  0017d81c: a02338cc sb r3,0x38cc(r1)
+
  0017d810: 00002010 mfhi r4                 |{{f/std|<nowiki>r4 = Random Tile X coord (division reminder - Tile ID is X + Y*MaxX)</nowiki>}}
  0017d820: 3c018019 lui r1,0x8019
+
  0017d814: 00051a03 sra r3,r5,0x08           |{{f/std|<nowiki>r3 = Random Tile / 0x100 = 0x01 if Random Tile is high elevation (ID >= 0x100)</nowiki>}}
  0017d824: a02238cb sb r2,0x38cb(r1)
+
  0017d818: 3c018019 lui r1,0x8019           |
  0017d828: 3c018019 lui r1,0x8019
+
  0017d81c: a02338cc sb r3,0x38cc(r1)         |{{f/store|<nowiki>Store Random Tile elevation to Target New elevation (0x801938cc)</nowiki>}} {{f/std|<nowiki> 801938cc </nowiki>}}
  0017d82c: a02438ca sb r4,0x38ca(r1)
+
  0017d820: 3c018019 lui r1,0x8019           |
  0017d830: 0c05e500 jal 0x00179400                 [[Null_some_Tile_Data_(192dd9)]]
+
  0017d824: a02238cb sb r2,0x38cb(r1)         |{{f/store|<nowiki>Store Random Tile Y  to Target New Y (0x801938cb)</nowiki>}} {{f/std|<nowiki> 801938cb </nowiki>}}
  0017d834: 00000000 nop
+
  0017d828: 3c018019 lui r1,0x8019           |
  0017d838: 8fbf0018 lw r31,0x0018(r29)
+
  0017d82c: a02438ca sb r4,0x38ca(r1)         |{{f/store|<nowiki>Store Random Tile X to Target New X (0x801938ca)</nowiki>}} {{f/std|<nowiki> 801938ca </nowiki>}}
  0017d83c: 8fb10014 lw r17,0x0014(r29)
+
  0017d830: 0c05e500 jal 0x00179400           |{{f/jal|Null_some_Tile_Data_(192dd9)|<nowiki>Null_some_Tile_Data_(192dd9)</nowiki>}} Nullify all targetable panels 0x01 byte
  0017d840: 8fb00010 lw r16,0x0010(r29)
+
  0017d834: 00000000 nop                    
  0017d844: 27bd0020 addiu r29,r29,0x0020
+
  0017d838: 8fbf0018 lw r31,0x0018(r29)      
  0017d848: 03e00008 jr r31
+
  0017d83c: 8fb10014 lw r17,0x0014(r29)      
 +
  0017d840: 8fb00010 lw r16,0x0010(r29)      
 +
  0017d844: 27bd0020 addiu r29,r29,0x0020    
 +
  0017d848: 03e00008 jr r31                  
 
  0017d84c: 00000000 nop
 
  0017d84c: 00000000 nop
</font>
+
=== Returns location ===
 +
'''Battle.bin'''
 +
  0017ce28: [[Map_calculations_for_attack]]

Revision as of 21:31, 12 February 2022

0017d708 - 0017d84c

This routine select a random tile among Tiles which have their "green panel" flag at byte [0x05] 
Rq : the 1st loop is a bit odd, using the targetable panels 0x01 byte to host Tile ID value (not matching the panel ID)
-------------------------------------------------------------------------------------------------------------------------------
0017d708: 27bdffe0 addiu r29,r29,-0x0020    |
0017d70c: afb00010 sw r16,0x0010(r29)       |
0017d710: 00008021 addu r16,r0,r0           |r16 = 0x00 green panel counter
0017d714: 00002821 addu r5,r0,r0            |r5 = 0x00
0017d718: 34090100 ori r9,r0,0x0100         |r9 = 0x100
0017d71c: 3c088019 lui r8,0x8019            |r8 = 0x80190000
0017d720: 25082dd8 addiu r8,r8,0x2dd8       |r8 = Targetable grid data pointer  0x80192dd8
0017d724: 3c068019 lui r6,0x8019            |r6 = 0x8019
0017d728: 24c6f8cc addiu r6,r6,-0x0734      |r6 = Tile data pointer  0x8018f8cc
0017d72c: 00003821 addu r7,r0,r0            |r7 = 0x00 (Targetable panel data counter)
0017d730: afbf0018 sw r31,0x0018(r29)       |
0017d734: afb10014 sw r17,0x0014(r29)       |
0017d738: 14a90002 bne r5,r9,0x0017d744     @ LOOP #If This iteration Tile is 0x100 Loop though all tiles
0017d73c: 00000000 nop                               | 
0017d740: 02008821 addu r17,r16,r0                   |r17 = green panel counter, low elevation tiles only
0017d744: 90c40005 lbu r4,0x0005(r6)             |r4 = This iteration Tile [0x05]
0017d748: 00000000 nop                           |
0017d74c: 30820080 andi r2,r4,0x0080             |r2 = 0x80 if this Tile has "green panel" flag ON
0017d750: 10400006 beq r2,r0,0x0017d76c          #If This Tile has green panel
0017d754: 00e81821 addu r3,r7,r8                 |r3 = Targetable panel data pointer
0017d758: 24e70005 addiu r7,r7,0x0005                |r7 = Targetable panel counter + 0x05 (size of panel data) not every iteration panel and tile do not match !! It's using panels 0x01 as a stack pointer
0017d75c: 26100001 addiu r16,r16,0x0001              |r16 = green panel counter + 1
0017d760: 3082007f andi r2,r4,0x007f                 |r2 = r4 without "green panel" flag
0017d764: a0c20005 sb r2,0x0005(r6)                  |Update this Tile [0x05] without "green panel" flag
0017d768: a0650001 sb r5,0x0001(r3)                  |Store loop counter (TIle ID) on Panel [0x01] byte 
0017d76c: 24a50001 addiu r5,r5,0x0001            |r5 = loop counter + 1
0017d770: 28a20200 slti r2,r5,0x0200             |r2 = 0x01 if counter < 0x200
0017d774: 1440fff0 bne r2,r0,0x0017d738     Λ loop while counter < 0x200
0017d778: 24c60008 addiu r6,r6,0x0008            |r6 = Tile data pointer + 0x08
0017d77c: 0c0088c3 jal 0x0002230c           |-->Random_Number_Generator return r2 = random halfword (0 to 0x7fff)
0017d780: 00000000 nop                      |
0017d784: 00500018 mult r2,r16              |Random * green panel counter
0017d788: 00001812 mflo r3                  |r3 = Random * green panel counter
0017d78c: 04610002 bgez r3,0x0017d798       #If r3 < 0x00 (random number was < 0x00) never true
0017d790: 00000000 nop                      |
0017d794: 24637fff addiu r3,r3,0x7fff            |r3 = random positive (security ?)
0017d798: 00031bc3 sra r3,r3,0x0f           |r3 =  random from 0x00 to green panel counter = random panel 
0017d79c: 00031080 sll r2,r3,0x02           |r2 = random panel * 4
0017d7a0: 00431021 addu r2,r2,r3            |r2 = random panel * 5 (panel offset)
0017d7a4: 3c018019 lui r1,0x8019            |r1 = 0x80190000
0017d7a8: 00220821 addu r1,r1,r2            |r1 = 0x80190000 + random panel offset
0017d7ac: 90242dd9 lbu r4,0x2dd9(r1)        |r4 = Random panel [0x01] byte (hold loop counter value which is tile ID)  0x80192dd8 + 0x01
0017d7b0: 0071182a slt r3,r3,r17            |r3 = 0x01 if random panel is low elevation
0017d7b4: 14600003 bne r3,r0,0x0017d7c4     #If random panel is on high elevation
0017d7b8: 000410c0 sll r2,r4,0x03           |r2 = Random Tile ID * 8
0017d7bc: 24840100 addiu r4,r4,0x0100            |r4 = Random Tile ID + higher elevation offset
0017d7c0: 000410c0 sll r2,r4,0x03                |r2 = Random Higher Tile ID * 8
0017d7c4: 3c018019 lui r1,0x8019            |r1 = 0x80190000
0017d7c8: 00220821 addu r1,r1,r2            |r1 = 0x80190000 + Random tile offset
0017d7cc: 9023f8d1 lbu r3,-0x072f(r1)       |r3 = Random Tile byte  [0x05] value 0x8018f8cc + 0x05
0017d7d0: 00000000 nop                      |
0017d7d4: 34630080 ori r3,r3,0x0080         |r3 = Random Tile [0x05] + green panel flag
0017d7d8: 3c018019 lui r1,0x8019            |r1 = 0x80190000
0017d7dc: 00220821 addu r1,r1,r2            |r1 = 0x80190000 + Random tile offset
0017d7e0: a023f8d1 sb r3,-0x072f(r1)        |Store random tile [0x05] byte updated with green panel flag (0x80)
0017d7e4: 34020001 ori r2,r0,0x0001         |r2 = 0x01
0017d7e8: 3c018019 lui r1,0x8019            |r1 = 0x80190000
0017d7ec: a022390f sb r2,0x390f(r1)         |Store 0x01 at 0x8019390f  8019390f
0017d7f0: 04810002 bgez r4,0x0017d7fc       #If random Tile ID  <0x00 ???
0017d7f4: 00802821 addu r5,r4,r0            |r5 = random tile ID
0017d7f8: 248500ff addiu r5,r4,0x00ff            |r5 = random tile ID + 0x00ff
0017d7fc: 3c03800e lui r3,0x800e            |r3 = 0x800e
0017d800: 90634e9c lbu r3,0x4e9c(r3)        |r3 = Map Max X
0017d804: 308200ff andi r2,r4,0x00ff        |r2 = low elevation Tile ID
0017d808: 0043001a div r2,r3                |low elevation ID / map Max X
0017d80c: 00001012 mflo r2                  |r2 = Random Tile Y coord
0017d810: 00002010 mfhi r4                  |r4 = Random Tile X coord (division reminder - Tile ID is X + Y*MaxX)
0017d814: 00051a03 sra r3,r5,0x08           |r3 = Random Tile / 0x100 = 0x01 if Random Tile is high elevation (ID >= 0x100)
0017d818: 3c018019 lui r1,0x8019            |
0017d81c: a02338cc sb r3,0x38cc(r1)         |Store Random Tile elevation to Target New elevation (0x801938cc)  801938cc 
0017d820: 3c018019 lui r1,0x8019            |
0017d824: a02238cb sb r2,0x38cb(r1)         |Store Random Tile Y  to Target New Y (0x801938cb)  801938cb 
0017d828: 3c018019 lui r1,0x8019            |
0017d82c: a02438ca sb r4,0x38ca(r1)         |Store Random Tile X to Target New X (0x801938ca)  801938ca 
0017d830: 0c05e500 jal 0x00179400           |-->Null_some_Tile_Data_(192dd9) Nullify all targetable panels 0x01 byte
0017d834: 00000000 nop                      
0017d838: 8fbf0018 lw r31,0x0018(r29)       
0017d83c: 8fb10014 lw r17,0x0014(r29)       
0017d840: 8fb00010 lw r16,0x0010(r29)       
0017d844: 27bd0020 addiu r29,r29,0x0020     
0017d848: 03e00008 jr r31                   
0017d84c: 00000000 nop

Returns location

Battle.bin
 0017ce28: Map_calculations_for_attack