Set target coordinates for ability?

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
Parameters : r4 = Attacker data pointer
             r5 = Attacker misc data 0x18c pointer

Store Updated Targeted X,Y and elevation at Attacker misc 0x1a8, 0x1a9 and 0x1aa
(Data are different if ability is Target specific, Tile specific or Random fire)
----------------------------------------------------------------------------------
0017d350: a0a00012 sb r0,0x0012(r5)         |
0017d354: 3c028019 lui r2,0x8019            |
0017d358: 9042390f lbu r2,0x390f(r2)        |r2 = 0x01 if random fire ability  0x8019390f
0017d35c: 00000000 nop                      |
0017d360: 1040000d beq r2,r0,0x0017d398     #If random fire has been done
0017d364: 34020006 ori r2,r0,0x0006         |r2 = 0x06 
0017d368: 3c028019 lui r2,0x8019                 | 
0017d36c: 904238ca lbu r2,0x38ca(r2)             |r2 = Ability Target new X  0x801938ca / 801938ca
0017d370: 00000000 nop                           |
0017d374: a0a2001c sb r2,0x001c(r5)              |Store Ability Targeted new X at Attacker misc data 0x1a8
0017d378: 3c028019 lui r2,0x8019                 |
0017d37c: 904238cb lbu r2,0x38cb(r2)             |r2 = Ability Target new Y  0x801938cb / 801938cb
0017d380: 00000000 nop                           |
0017d384: a0a2001d sb r2,0x001d(r5)              |Store Ability Targeted new Y at Attacker misc data 0x1a9
0017d388: 3c028019 lui r2,0x8019                 |
0017d38c: 904238cc lbu r2,0x38cc(r2)             |r2 = Ability Target new Elevation   0x801938cc / 801938cc
0017d390: 0805f502 j 0x0017d408                  >>jump to END (store elevation there)
0017d394: 00000000 nop                           |
0017d398: 90830178 lbu r3,0x0178(r4)        #Else load attacker current action targeting type
0017d39c: 00000000 nop                      |
0017d3a0: 14620012 bne r3,r2,0x0017d3ec     #If Targeting type is 0x06 (Target specific)
0017d3a4: 00000000 nop                           | 
0017d3a8: 90830179 lbu r3,0x0179(r4)             |r3 = Target ID
0017d3ac: 00000000 nop                           |
0017d3b0: 000310c0 sll r2,r3,0x03                |r2 = Target ID * 8
0017d3b4: 00431023 subu r2,r2,r3                 |r2 = Target ID * 7
0017d3b8: 00021180 sll r2,r2,0x06                |r2 = Target ID * 0x1c0
0017d3bc: 3c038019 lui r3,0x8019                 |
0017d3c0: 246308cc addiu r3,r3,0x08cc            |r3 = Start of Unit Data
0017d3c4: 00431021 addu r2,r2,r3                 |r2 = Target unit data
0017d3c8: 90430047 lbu r3,0x0047(r2)             |r3 = Target X coordinates
0017d3cc: 00000000 nop                           |
0017d3d0: a0a3001c sb r3,0x001c(r5)              |Store Target X at Attacker misc data 0x1a8
0017d3d4: 90430048 lbu r3,0x0048(r2)             |r3 = Target Y coordinates
0017d3d8: 00000000 nop                           |
0017d3dc: a0a3001d sb r3,0x001d(r5)              |Store Target Y at Attacker misc data 0x1a9
0017d3e0: 94420048 lhu r2,0x0048(r2)             |r2 = Target Y + elevation/facing
0017d3e4: 0805f502 j 0x0017d408                  >>jump to END (store elevation there)
0017d3e8: 000213c2 srl r2,r2,0x0f                |r2 = Target elevation  left bit of halfword - 0x01 if r2 = has 0x8000 enabled)
0017d3ec: 9082017a lbu r2,0x017a(r4)        #Else (Tile specific targeting) r2 = Attacker Targeted (panel) X coord
0017d3f0: 00000000 nop                           | 
0017d3f4: a0a2001c sb r2,0x001c(r5)              |Store Targeted X at Attacker misc data 0x1a8
0017d3f8: 9082017e lbu r2,0x017e(r4)             |r2 = Attacker Targeted (panel) Y coord
0017d3fc: 00000000 nop                           |
0017d400: a0a2001d sb r2,0x001d(r5)              |Store Targeted Y at Attacker misc data 0x1a9
0017d404: 9082017c lbu r2,0x017c(r4)             |r2 = Attacker Targeted (panel) Elevation
0017d408: 03e00008 jr r31                        |
0017d40c: a0a2001e sb r2,0x001e(r5)         store Updated elevation at Attacker misc data 0x1aa

Notes

Random Fire See Select_Random_Tile_For_Random_Fire_Abilities
Enter this section if 0x8019390f <> 0x00  (*)
Uses 0x801938ca as X (random targeted X)
Uses 0x801938cb as Y 
Uses 0x801938cc as Elevation 

Target specific targeting
Enter this section if Attacker 0x178 = 0x06
Uses Target ID to get to Target Unit Data
Uses Target 0x47 as X
Uses Target 0x48 as Y
Uses Target 0x48 (halfword) last bit (right shifted by 0xf) as elevation

Tile specific targeting
Enter this section by default (Not Random fire and Attacker 0x178 <> 0x06)
Uses Attacker 0x17a as X
Uses Attacker 0x17e as X
Uses Attacker 0x17c as Elevation

*Notes 0x8019390f / 8019390f
Found only three occurences in Battle.bin (look after 0x390f)
- Nullified in Main_ability_loading_routine?
- Then set to 0x01 in Select_Random_Tile_For_Random_Fire_Abilities
- Then Checked here 

Return location

0017d154: Main_ability_loading_routine?