See if ability should be used based on CT

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
BATTLE.BIN :  - See if ability should be used based on CT
------------------------------------------------------------------------------------------
Parameter : r4 = Unit ID 
Return : r2 = 0x00 if Unit Won't move before Ability CT ends
         r2 = 0x01 if Unit will get an active Turn before Ability CT ends
------------------------------------------------------------------------------------------
0019f0d8: 27bdffe0 addiu r29,r29,-0x0020     |
0019f0dc: afb00010 sw r16,0x0010(r29)        |
0019f0e0: 3c10801a lui r16,0x801a            |
0019f0e4: 9210f3c5 lbu r16,-0x0c3b(r16)      |Considered Ability CT 8019f3c4 + 0x01
0019f0e8: afb10014 sw r17,0x0014(r29)        |
0019f0ec: 00808821 addu r17,r4,r0            |Preserve Unit ID
0019f0f0: 12000013 beq r16,r0,0x0019f140     #If Ability CT is null Exit  Returns 0x00
0019f0f4: afbf0018 sw r31,0x0018(r29)        |
0019f0f8: 001120c0 sll r4,r17,0x03           |
0019f0fc: 00912023 subu r4,r4,r17            |
0019f100: 00042180 sll r4,r4,0x06            |Unit ID * 0x1c0
0019f104: 3c028019 lui r2,0x8019             |
0019f108: 244208cc addiu r2,r2,0x08cc        |
0019f10c: 0c0666e6 jal 0x00199b98            |-->Calculate Clockticks Until Unit Acts returns CT before Unit action
0019f110: 00822021 addu r4,r4,r2             |Send Unit Battle Data pointer ( 0x801908cc + Unit offset)
0019f114: 3c037fff lui r3,0x7fff             |
0019f118: 3463ffff ori r3,r3,0xffff          |
0019f11c: 10430008 beq r2,r3,0x0019f140      #If Unit will never get a Turn Exit  Returns 0x00
0019f120: 0202102a slt r2,r16,r2             |0x1 if Ability CT < CT before Unit Turn
0019f124: 14400007 bne r2,r0,0x0019f144      #If Considered Unit won't get his turn before Abilty CT ends Exit  Returns 0x00
0019f128: 00001021 addu r2,r0,r0                 |
                                             Else : Considered Unit will get a Turn before end of Ability CT
0019f12c: 02002021 addu r4,r16,r0            |Send CT
0019f130: 0c067c57 jal 0x0019f15c            |-->Status/CT_based_decision returns 0x1 if Unit is active (wil get an active turn)
0019f134: 02202821 addu r5,r17,r0            |Send Unit ID
0019f138: 08067c51 j 0x0019f144              |Exit  returns 0x00 if Unit is inactive else 0x01
0019f13c: 00000000 nop                       |
0019f140: 00001021 addu r2,r0,r0
0019f144: 8fbf0018 lw r31,0x0018(r29)
0019f148: 8fb10014 lw r17,0x0014(r29)
0019f14c: 8fb00010 lw r16,0x0010(r29)
0019f150: 27bd0020 addiu r29,r29,0x0020
0019f154: 03e00008 jr r31
0019f158: 00000000 nop 

Returns Location

0019b1a0: AI_ability_use_control_routine
0019b208: AI_ability_use_control_routine
0019b878: AI_Targeting_Matrix_Analysis_(0019b7b8)
0019b930: AI_Targeting_Matrix_Analysis_(0019b7b8)
0019f08c: Set_unit_untargetable_based_on_19f0d8_routine