Difference between revisions of "Get Final Height data from unit misc data"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
 
(One intermediate revision by the same user not shown)
Line 50: Line 50:
 
  '''Battle.bin'''
 
  '''Battle.bin'''
 
  0008c4f8: [[Set_Unit_Xmod,_Y_Mod_and_Height_data_from_unit_ID]]
 
  0008c4f8: [[Set_Unit_Xmod,_Y_Mod_and_Height_data_from_unit_ID]]
 +
 +
'''Additional Notes'''
 +
"0007d580: 9222007e lbu r2,0x007e(r17)" is loading from Misc. Data, which the AI hasn't updated at this point. As a result, the AI may occasionally fail to compensate for being on a upper level, especially if they were previously
 +
on a non-upper tile. There might also be similar issues with the Misc. Mount/Rider flag maybe. Anyone looking to modify AI in the future should be on the lookout for calls from Misc. Data and also only make calls to static attributes.

Latest revision as of 08:59, 28 April 2024

Parameters : r4 = Unit misc. data pointer
Returns : r2 = Unit height data

0007d51c: 27bdffd8 addiu r29,r29,-0x0028    |
0007d520: afb00018 sw r16,0x0018(r29)       |
0007d524: 00808021 addu r16,r4,r0           |r16 = Unit's Misc Data Pointer
0007d528: afbf0020 sw r31,0x0020(r29)       |
0007d52c: 0c01f428 jal 0x0007d0a0           |-->Get_Unit_misc_data_pointer_of_ridden_unit_by_r4 r2 = Ridden unit data pointer if any, unit data pointer if not, 0x00 if fail.
0007d530: afb1001c sw r17,0x001c(r29)       |
0007d534: 00408821 addu r17,r2,r0           |r17 = r16 Unit's Misc Data Pointer or Ridden unit if r16 is riding
0007d538: 8e220134 lw r2,0x0134(r17)        |r2 = Unit on the ground data pointer
0007d53c: 00000000 nop                      |
0007d540: 90430047 lbu r3,0x0047(r2)        |r3 = Unit on the ground X coord.
0007d544: 00000000 nop                      |
0007d548: 000310c0 sll r2,r3,0x03           |X * 8
0007d54c: 00431023 subu r2,r2,r3            |X * 7
0007d550: 00021080 sll r2,r2,0x02           |X * 28
0007d554: 2442000e addiu r2,r2,0x000e       |X * 28 + 14 (14 is a value that will be used in further routines)
0007d558: a7a20010 sh r2,0x0010(r29)        |Store Unit's X Mod on stack 0x10
0007d55c: 8e220134 lw r2,0x0134(r17)        |r2 = Unit on the ground data pointer
0007d560: 00000000 nop                      |
0007d564: 90430048 lbu r3,0x0048(r2)        |r3 = Unit on the ground Y coord.
0007d568: 02202021 addu r4,r17,r0           |r4 = Unit's on the ground Misc Data Pointer
0007d56c: 000310c0 sll r2,r3,0x03           |Y * 8
0007d570: 00431023 subu r2,r2,r3            |Y * 7
0007d574: 00021080 sll r2,r2,0x02           |Y * 28
0007d578: 2442000e addiu r2,r2,0x000e       |Y * 28 + 14 (14 is a value that will be used in further routines)
0007d57c: a7a20014 sh r2,0x0014(r29)        |Store Unit's Y Mod on stack 0x14
0007d580: 9222007e lbu r2,0x007e(r17)       |Load Unit's on the ground elevation
0007d584: 27a50010 addiu r5,r29,0x0010      |r5 = Stack Pointer + 0x10
0007d588: 0c01f435 jal 0x0007d0d4           |-->Complex_Height_Data_from_unit_misc_data_and_coordinates returns r2 = Height data
0007d58c: a7a20012 sh r2,0x0012(r29)        |Store Unit's Elevation on stack 0x012
0007d590: 00402021 addu r4,r2,r0            |r4 = Unit height data
0007d594: 92030130 lbu r3,0x0130(r16)       |r3 = Unit misc. Mount/rider flag
0007d598: 34020001 ori r2,r0,0x0001         |r2 = 0x01 (riding flag)
0007d59c: 14620005 bne r3,r2,0x0007d5b4     #If unit is riding
0007d5a0: 00041400 sll r2,r4,0x10           |r2 = Unit height data * 1024
0007d5a4: 96230076 lhu r3,0x0076(r17)            |Unit misc ??
0007d5a8: 2482fff6 addiu r2,r4,0xfff6            |r2 = -(Height data) - 0x0a 
0007d5ac: 00622021 addu r4,r3,r2                 |r4 = -(Height data + 0x0a) + Unit misc ??
0007d5b0: 00041400 sll r2,r4,0x10                |r2 = r4*1024
0007d5b4: 00021403 sra r2,r2,0x10           |r2 = Unit height data (register cleanup)
0007d5b8: 8fbf0020 lw r31,0x0020(r29)       |
0007d5bc: 8fb1001c lw r17,0x001c(r29)       |
0007d5c0: 8fb00018 lw r16,0x0018(r29)       |
0007d5c4: 27bd0028 addiu r29,r29,0x0028     |
0007d5c8: 03e00008 jr r31                   END
0007d5cc: 00000000 nop

Return location

Battle.bin
0008c4f8: Set_Unit_Xmod,_Y_Mod_and_Height_data_from_unit_ID
Additional Notes
"0007d580: 9222007e lbu r2,0x007e(r17)" is loading from Misc. Data, which the AI hasn't updated at this point. As a result, the AI may occasionally fail to compensate for being on a upper level, especially if they were previously
on a non-upper tile. There might also be similar issues with the Misc. Mount/Rider flag maybe. Anyone looking to modify AI in the future should be on the lookout for calls from Misc. Data and also only make calls to static attributes.