Song abilities

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
No Parameters - Returns Nothing

Uses Ability ID - Hard coded
Jump to Ability Dedicated section and Update Action data 
Update Attack type too (disables previous flags)
------------------------------------------------------------------------------------------------------
001869ec: 3c028019 lui r2,0x8019            |
001869f0: 944238d6 lhu r2,0x38d6(r2)        |r2 = Current Ability used Ability ID
001869f4: 27bdffe8 addiu r29,r29,-0x0018    |
001869f8: 2443ffaa addiu r3,r2,-0x0056      |r3 < 0x00 if Ability ID is < So,g Abilities ID
001869fc: 2c620007 sltiu r2,r3,0x0007       |r2 = 0x01 If used Ability ID is between 0x56 and 0x5c 
00186a00: 10400035 beq r2,r0,0x00186ad8     #If Used Ability is a Song Ability
00186a04: afbf0010 sw r31,0x0010(r29)           |
00186a08: 00031080 sll r2,r3,0x02               |r2 = Song Ability Offset      (Ability ID- 0x056)*4
00186a0c: 3c018017 lui r1,0x8017                |
00186a10: 00220821 addu r1,r1,r2                |r1 = 0x801700xx (xx = Song Ability Offset)
00186a14: 8c22423c lw r2,0x423c(r1)             |r2 = Used Song Ability Adress pointer  0x8017423c + Ability Offset
00186a18: 00000000 nop                          |
00186a1c: 00400008 jr r2                        |Jump to Adress Pointer      ( Song Abilities Table  )
00186a20: 00000000 nop                          
00186a24: 3c028019 lui r2,0x8019                Angel Song
00186a28: 944238ce lhu r2,0x38ce(r2)                |r2 = Ability XA
00186a2c: 3c038019 lui r3,0x8019                    |
00186a30: 946338d0 lhu r3,0x38d0(r3)                |r3 = Ability YA
00186a34: 3c048019 lui r4,0x8019                    |
00186a38: 8c842d90 lw r4,0x2d90(r4)                 |r4 = Target Current Action (TCA) data pointer
00186a3c: 00431021 addu r2,r2,r3                    |r2 = XA + YA
00186a40: a482000a sh r2,0x000a(r4)                 |Set TCA MP recovery = XA+YA
00186a44: 34020010 ori r2,r0,0x0010                 |r2 = 0x10 (MP recovery Attack type flag)
00186a48: 08061aba j 0x00186ae8                     >>Jump to  END
00186a4c: a0820025 sb r2,0x0025(r4)                 |Set TCA Attack type = MP recovery (disables other flags)
00186a50: 3c028019 lui r2,0x8019                Life Song
00186a54: 944238ce lhu r2,0x38ce(r2)                |r2 = Ability XA
00186a58: 3c038019 lui r3,0x8019                    |
00186a5c: 946338d0 lhu r3,0x38d0(r3)                |r3 = Ability YA
00186a60: 3c048019 lui r4,0x8019                    |
00186a64: 8c842d90 lw r4,0x2d90(r4)                 |r4 = Target Current Action (TCA) data pointer
00186a68: 00431021 addu r2,r2,r3                    |r2 = XA + YA
00186a6c: a4820006 sh r2,0x0006(r4)                 |Set TCA HP recovery = XA+YA
00186a70: 34020040 ori r2,r0,0x0040                 |r2 = 0x40 (HP recovery Attack type flag)
00186a74: 08061aba j 0x00186ae8                     >>Jump to  END
00186a78: a0820025 sb r2,0x0025(r4)                 |Set TCA Attack type = HP recovery (disables other flags)
00186a7c: 3c038019 lui r3,0x8019                Cheer Song
00186a80: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00186a84: 34020081 ori r2,r0,0x0081                 |r2 = 0x81 (Stat bonus + 1)
00186a88: 08061ab6 j 0x00186ad8                     >>Jump to enable attack type pseudo status flag
00186a8c: a0620012 sb r2,0x0012(r3)                 |Set TCA Speed change to +1 (0x81)
00186a90: 3c038019 lui r3,0x8019                Battle Song
00186a94: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00186a98: 34020081 ori r2,r0,0x0081                 |r2 = 0x81 (Stat bonus + 1)
00186a9c: 08061ab6 j 0x00186ad8                     >>Jump to enable attack type pseudo status flag
00186aa0: a0620014 sb r2,0x0014(r3)                 |Set TCA PA change to +1 (0x81)
00186aa4: 3c038019 lui r3,0x8019                Magic Song
00186aa8: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00186aac: 34020081 ori r2,r0,0x0081                 |r2 = 0x81 (Stat bonus + 1)
00186ab0: 08061ab6 j 0x00186ad8                     >>Jump to enable attack type pseudo status flag
00186ab4: a0620015 sb r2,0x0015(r3)                 |Set TCA MA change to +1 (0x81)
                                                Nameless Song
00186ab8: 0c061fc9 jal 0x00187f24                   |-->Apply_status_(to_action) Add Ability status - if successful update TCA Attack type
00186abc: 00000000 nop                              |
00186ac0: 08061aba j 0x00186ae8                     >>Jump to  END
00186ac4: 00000000 nop                              |
00186ac8: 3c038019 lui r3,0x8019                Last Song
00186acc: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00186ad0: 340200ff ori r2,r0,0x00ff                 |r2 = 0x0ff (quick effect)
00186ad4: a0620013 sb r2,0x0013(r3)                 |Set CT Change to +127 (0x80 bonus + 0x7f)
00186ad8: 3c038019 lui r3,0x8019                    |
00186adc: 8c632d90 lw r3,0x2d90(r3)                 |r3 = TCA data pointer
00186ae0: 34020001 ori r2,r0,0x0001         |r2 = 0x01                Landing site off all pseudo status jumps
00186ae4: a0620025 sb r2,0x0025(r3)         |Set TCA Attack type to pseudo status (disables other flags)
00186ae8: 8fbf0010 lw r31,0x0010(r29)       END
00186aec: 27bd0018 addiu r29,r29,0x0018     
00186af0: 03e00008 jr r31                   
00186af4: 00000000 nop                      

Hard coded mechanics

Uses Ability ID to load the dedicated jump address. Calling this routines with another Ability will skip the routine.

 Ability          ID     Jump Adress 
- Angel Song      0x56   80186a24
- Life Song       0x57   80186a50
- Cheer Song      0x58   80186a7c
- Battle Song     0x59   80186a90
- Magic Song      0x5a   80186aa4
- Nameless Song   0x5b   80186ab8
- Last Song       0x5c   80186ac8

Return location

Battle.bin
001893c8: Formula 1C - Hit (X)%