Main Ability Loading Routine

From Final Fantasy Hacktics Wiki
Revision as of 20:19, 20 February 2022 by Orkney (talk | contribs) (→‎Notes)
Jump to navigation Jump to search

0017ce44: 27bdffb0 addiu r29,r29,0xffb0
0017ce48: afb40040 sw r20,0x0040(r29)
0017ce4c: 0080a021 addu r20,r4,r0               r20 = unit ID of the attacker
0017ce50: afb10034 sw r17,0x0034(r29)
0017ce54: 00a08821 addu r17,r5,r0               r17 = misc unit data
0017ce58: 340300ff ori r3,r0,0x00ff
0017ce5c: afb20038 sw r18,0x0038(r29)
0017ce60: 34120014 ori r18,r0,0x0014
0017ce64: 27a20024 addiu r2,r29,0x0024
0017ce68: afbf0048 sw r31,0x0048(r29)
0017ce6c: afb50044 sw r21,0x0044(r29)
0017ce70: afb3003c sw r19,0x003c(r29)
0017ce74: afb00030 sw r16,0x0030(r29)
0017ce78: 3c018019 lui r1,0x8019
0017ce7c: ac20f4f8 sw r0,-0x0b08(r1)            clear 8018f4f8
0017ce80: 3c018019 lui r1,0x8019
0017ce84: ac20f4f4 sw r0,-0x0b0c(r1)
0017ce88: 3c018019 lui r1,0x8019
0017ce8c: a020390f sb r0,0x390f(r1)             clear ability X
0017ce90: a0430000 sb r3,0x0000(r2)             store 0xff onto stack
0017ce94: 2652ffff addiu r18,r18,0xffff         decrease r18 (starts at 0x14)
0017ce98: 0641fffd bgez r18,0x0017ce90          branch if greater or equal to zero
0017ce9c: 2442ffff addiu r2,r2,0xffff           decrease r2
0017cea0: 2a820015 slti r2,r20,0x0015           set if attacker ID < 20
0017cea4: 14400003 bne r2,r0,0x0017ceb4         branch if so
0017cea8: 34120015 ori r18,r0,0x0015
0017ceac: 0805f4ca j 0x0017d328                 jump to end
0017ceb0: 2402ffff addiu r2,r0,0xffff
0017ceb4: 001410c0 sll r2,r20,0x03
0017ceb8: 00541023 subu r2,r2,r20
0017cebc: 00021180 sll r2,r2,0x06
0017cec0: 3c038019 lui r3,0x8019
0017cec4: 246308cc addiu r3,r3,0x08cc           r19 = attacker unit data
0017cec8: 00439821 addu r19,r2,r3
0017cecc: 0c062f5d jal 0x0018bd74               Current Action Data Nulling
0017ced0: 2664018c addiu r4,r19,0x018c
0017ced4: 3c108019 lui r16,0x8019
0017ced8: 26102da0 addiu r16,r16,0x2da0
0017cedc: 02002021 addu r4,r16,r0
0017cee0: 34020008 ori r2,r0,0x0008
0017cee4: a260018c sb r0,0x018c(r19)            clear hit flag byte
0017cee8: 0c062f5d jal 0x0018bd74               Current Action Data Nulling
0017ceec: a262018e sb r2,0x018e(r19)            store evade type = 8
0017cef0: a2000000 sb r0,0x0000(r16)            clear temp action data
0017cef4: a2200022 sb r0,0x0022(r17)            clear misc. data
0017cef8: a2200016 sb r0,0x0016(r17)
0017cefc: a2200013 sb r0,0x0013(r17)
0017cf00: 3c028019 lui r2,0x8019
0017cf04: 8c42f5f0 lw r2,-0x0a10(r2)            load reaction check
0017cf08: 00008021 addu r16,r0,r0
0017cf0c: 10400015 beq r2,r0,0x0017cf64         branch if not reacting
0017cf10: a6200020 sh r0,0x0020(r17)

If Reacting
0017cf14: 02802021 addu r4,r20,r0               r4 = attacker ID
0017cf18: 02202821 addu r5,r17,r0               r5 = misc. data
0017cf1c: 27a60028 addiu r6,r29,0x0028
0017cf20: 3c028019 lui r2,0x8019
0017cf24: 94422d9c lhu r2,0x2d9c(r2)            load reaction ID
0017cf28: 27a70010 addiu r7,r29,0x0010
0017cf2c: 0c05f2b3 jal 0x0017cacc               Reaction Target/Hit Calculation
0017cf30: a6220020 sh r2,0x0020(r17)            returns r2=01 if no hit

flags = 04, !08
0017cf34: 10400010 beq r2,r0,0x0017cf78         branch if hit
0017cf38: 340201b8 ori r2,r0,0x01b8
0017cf3c: 3c038019 lui r3,0x8019
0017cf40: 84632d9c lh r3,0x2d9c(r3)             load reaction ID
0017cf44: 00000000 nop
0017cf48: 14620003 bne r3,r2,0x0017cf58         branch if not 0x1b8 - Reflect
0017cf4c: 34020001 ori r2,r0,0x0001             return r2=01
0017cf50: 0805f3d7 j 0x0017cf5c
0017cf54: a3a2002c sb r2,0x002c(r29)            store 1 on the stack
0017cf58: a3a0002c sb r0,0x002c(r29)            store 0 on the stack
0017cf5c: 0805f3de j 0x0017cf78
0017cf60: 34100001 ori r16,r0,0x0001

If not Reacting
0017cf64: 9262016f lbu r2,0x016f(r19)           load skillset of last attack?
0017cf68: 00000000 nop
0017cf6c: 14520002 bne r2,r18,0x0017cf78        branch if skillset isn't 0x15 - math skill
0017cf70: 34020001 ori r2,r0,0x0001
0017cf74: a2220013 sb r2,0x0013(r17)

If reaction target/hit calculation is affirmative
0017cf78: 16000041 bne r16,r0,0x0017d080        branch if reaction = reflect
0017cf7c: 27a40010 addiu r4,r29,0x0010
0017cf80: 2664016e addiu r4,r19,0x016e          r4 = attackers target data offset
0017cf84: 0c05f349 jal 0x0017cd24               Map calculations for attack, weapon range, etc.
0017cf88: 27a5002c addiu r5,r29,0x002c
0017cf8c: 2403ffff addiu r3,r0,0xffff
0017cf90: 14430004 bne r2,r3,0x0017cfa4         branch attack is valid
0017cf94: 2402ffff addiu r2,r0,0xffff
0017cf98: a2200001 sb r0,0x0001(r17)            clear hit counter
0017cf9c: 0805f4ca j 0x0017d328
0017cfa0: a2200018 sb r0,0x0018(r17)            clear ??

0017cfa4: 3c108019 lui r16,0x8019
0017cfa8: 261038ef addiu r16,r16,0x38ef         801938ef
0017cfac: 92020000 lbu r2,0x0000(r16)           load post action target ID
0017cfb0: 00000000 nop
0017cfb4: 2c420015 sltiu r2,r2,0x0015           set if less than 20
0017cfb8: 1040002d beq r2,r0,0x0017d070         branch if invalid target
0017cfbc: 27a40010 addiu r4,r29,0x0010
0017cfc0: 3c028019 lui r2,0x8019
0017cfc4: 944238c8 lhu r2,0x38c8(r2)            load post-action
0017cfc8: 00000000 nop
0017cfcc: 14400007 bne r2,r0,0x0017cfec         branch if not 0 (reacting?)
0017cfd0: 00000000 nop
0017cfd4: 3c028019 lui r2,0x8019
0017cfd8: 904238ed lbu r2,0x38ed(r2)            load can poach flags
0017cfdc: 00000000 nop
0017cfe0: 30420080 andi r2,r2,0x0080
0017cfe4: 10400022 beq r2,r0,0x0017d070         branch if not taking fall damage
0017cfe8: 00000000 nop

if 801938ed
0017cfec: 0c05ed28 jal 0x0017b4a0               Disable Green Panel Flags
0017cff0: 00000000 nop
0017cff4: 340600ff ori r6,r0,0x00ff
0017cff8: 27a40011 addiu r4,r29,0x0011
0017cffc: 27a50020 addiu r5,r29,0x0020
0017d000: 92030000 lbu r3,0x0000(r16)           load post action target ID
0017d004: 34020001 ori r2,r0,0x0001
0017d008: afa20028 sw r2,0x0028(r29)
0017d00c: a3a30010 sb r3,0x0010(r29)
0017d010: a0860000 sb r6,0x0000(r4)
0017d014: 24840001 addiu r4,r4,0x0001
0017d018: 0085102a slt r2,r4,r5
0017d01c: 1440fffc bne r2,r0,0x0017d010
0017d020: 00000000 nop
0017d024: 3c028019 lui r2,0x8019
0017d028: 904238ef lbu r2,0x38ef(r2)            load post action target ID
0017d02c: 00000000 nop
0017d030: 000220c0 sll r4,r2,0x03
0017d034: 00822023 subu r4,r4,r2
0017d038: 00042180 sll r4,r4,0x06
0017d03c: 3c028019 lui r2,0x8019
0017d040: 244208cc addiu r2,r2,0x08cc           get target for post action's data
0017d044: 0c060428 jal 0x001810a0               Map Location Calculation
0017d048: 00822021 addu r4,r4,r2
0017d04c: 000210c0 sll r2,r2,0x03
0017d050: 3c038019 lui r3,0x8019
0017d054: 2463f8cc addiu r3,r3,0xf8cc           tile data
0017d058: 00431021 addu r2,r2,r3
0017d05c: 90430005 lbu r3,0x0005(r2)
0017d060: 00000000 nop
0017d064: 34630080 ori r3,r3,0x0080             set target's panel = targeted
0017d068: a0430005 sb r3,0x0005(r2)
0017d06c: 27a40010 addiu r4,r29,0x0010

0017d070: 0c05f614 jal 0x0017d850               0017d850 - 0017da1c more targeting checks
0017d074: 02602821 addu r5,r19,r0
0017d078: afa20028 sw r2,0x0028(r29)
0017d07c: 27a40010 addiu r4,r29,0x0010
0017d080: 341500ff ori r21,r0,0x00ff
0017d084: 27b00010 addiu r16,r29,0x0010
0017d088: 93a20028 lbu r2,0x0028(r29)
0017d08c: 3c018019 lui r1,0x8019
0017d090: a02238ec sb r2,0x38ec(r1)             store able to knockback/hit counter
0017d094: 0c063b7e jal 0x0018edf8               Store ability data
0017d098: 27b20025 addiu r18,r29,0x0025
0017d09c: 0c062c9d jal 0x0018b274               Store used weapon ID based on action menu byte
0017d0a0: 2664016e addiu r4,r19,0x016e
0017d0a4: 92050000 lbu r5,0x0000(r16)           load from stack
0017d0a8: 00000000 nop
0017d0ac: 10b50005 beq r5,r21,0x0017d0c4        branch if r5 = 0xff?
0017d0b0: 26100001 addiu r16,r16,0x0001
0017d0b4: 3c018019 lui r1,0x8019
0017d0b8: a02038e9 sb r0,0x38e9(r1)             clear default to attack?
0017d0bc: 0c062cd3 jal 0x0018b34c               Pre Formula Setup (FDC)
0017d0c0: 2664016e addiu r4,r19,0x016e
0017d0c4: 0212102a slt r2,r16,r18               r16 and r18 = stack addresses
0017d0c8: 1440fff6 bne r2,r0,0x0017d0a4         perform for all targets?
0017d0cc: 00000000 nop
0017d0d0: 0c062b1d jal 0x0018ac74               Remove transparent status if Jump is used?
0017d0d4: 02602021 addu r4,r19,r0
0017d0d8: 0c063b89 jal 0x0018ee24               Count number of targets hit by ability, return r2 = hit counter
0017d0dc: 26240002 addiu r4,r17,0x0002
0017d0e0: afa20028 sw r2,0x0028(r29)            store hit counter
0017d0e4: 93a20028 lbu r2,0x0028(r29)           load hit counter
0017d0e8: 00000000 nop
0017d0ec: a2220001 sb r2,0x0001(r17)            store hit counter in 0x18c of misc. data
0017d0f0: 93a20028 lbu r2,0x0028(r29)           load hit counter
0017d0f4: 3c038019 lui r3,0x8019
0017d0f8: 8c63f5f0 lw r3,-0x0a10(r3)            load reaction byte
0017d0fc: 3c018019 lui r1,0x8019
0017d100: a02238ec sb r2,0x38ec(r1)             store hit counter
0017d104: 14600004 bne r3,r0,0x0017d118         branch if ability is a reaction?
0017d108: 02602021 addu r4,r19,r0
0017d10c: 34020001 ori r2,r0,0x0001
0017d110: 3c018019 lui r1,0x8019
0017d114: a02238e8 sb r2,0x38e8(r1)             store can gain exp
0017d118: a2200023 sb r0,0x0023(r17)
0017d11c: 93a60028 lbu r6,0x0028(r29)           load hit counter
0017d120: 0c05f504 jal 0x0017d410               Draw out routine dealing with experience gain
0017d124: 02202821 addu r5,r17,r0               r5 = misc. data
0017d128: a2340000 sb r20,0x0000(r17)           store attacking unit ID?
0017d12c: 3c028019 lui r2,0x8019
0017d130: 904238d8 lbu r2,0x38d8(r2)            load used weapon ID
0017d134: 02602021 addu r4,r19,r0
0017d138: a2200017 sb r0,0x0017(r17)            clear reaction occurred byte?
0017d13c: a222001f sb r2,0x001f(r17)            store used weapon ID
0017d140: 3c028019 lui r2,0x8019
0017d144: 904238c3 lbu r2,0x38c3(r2)            load hit number
0017d148: 02202821 addu r5,r17,r0               r5 = misc unit data
0017d14c: 0c05f4d4 jal 0x0017d350               Set target coordinates for ability?
0017d150: a2220019 sb r2,0x0019(r17)            store hit number
0017d154: 8fa20028 lw r2,0x0028(r29)            load hit counter
0017d158: 00000000 nop
0017d15c: 1440001c bne r2,r0,0x0017d1d0         branch if units are hit
0017d160: 00000000 nop

If units are not hit
0017d164: 3c028019 lui r2,0x8019
0017d168: 904238c3 lbu r2,0x38c3(r2)            load hit number
0017d16c: 00000000 nop
0017d170: 24420001 addiu r2,r2,0x0001           increment current hit counter
0017d174: 3c018019 lui r1,0x8019
0017d178: a02238c3 sb r2,0x38c3(r1)             store new hit number
0017d17c: 96630170 lhu r3,0x0170(r19)           load last attack used
0017d180: 93a2002c lbu r2,0x002c(r29)           load ability flags 5
0017d184: a620001a sh r0,0x001a(r17)            clear ?? reaction ID?
0017d188: 30420001 andi r2,r2,0x0001
0017d18c: 14400003 bne r2,r0,0x0017d19c         branch if animate on miss = true
0017d190: a6230014 sh r3,0x0014(r17)            store last attack used
0017d194: 34020001 ori r2,r0,0x0001
0017d198: a2220012 sb r2,0x0012(r17)            store animate on miss flag
0017d19c: 3c028019 lui r2,0x8019
0017d1a0: 904238c3 lbu r2,0x38c3(r2)            load current hit counter
0017d1a4: 3c038019 lui r3,0x8019
0017d1a8: 906338c2 lbu r3,0x38c2(r3)            load number of hits
0017d1ac: 00000000 nop
0017d1b0: 0043102b sltu r2,r2,r3                set if number of hits not reached total yet
0017d1b4: 10400003 beq r2,r0,0x0017d1c4         branch if not
0017d1b8: 34020001 ori r2,r0,0x0001
0017d1bc: 0805f472 j 0x0017d1c8
0017d1c0: a2220018 sb r2,0x0018(r17)            store 01 into ??
0017d1c4: a2200018 sb r0,0x0018(r17)            clear ??
0017d1c8: 0805f4ca j 0x0017d328                 jump to end
0017d1cc: 34020001 ori r2,r0,0x0001             return r2 = 0x01

if units are hit:
0017d1d0: 3c028019 lui r2,0x8019
0017d1d4: 9042390e lbu r2,0x390e(r2)            load ability formula?
0017d1d8: a2200012 sb r0,0x0012(r17)            clear ??
0017d1dc: a2220016 sb r2,0x0016(r17)            store ability formula?
0017d1e0: 3c038019 lui r3,0x8019
0017d1e4: 946338c6 lhu r3,0x38c6(r3)            load reaction ID ?
0017d1e8: 00000000 nop
0017d1ec: 10600009 beq r3,r0,0x0017d214         branch if no reaction?
0017d1f0: 00000000 nop
0017d1f4: 3c028019 lui r2,0x8019
0017d1f8: 944238c8 lhu r2,0x38c8(r2)            load post action thing?
0017d1fc: 00000000 nop
0017d200: 14400004 bne r2,r0,0x0017d214
0017d204: 34020001 ori r2,r0,0x0001
0017d208: a6230014 sh r3,0x0014(r17)            store last attack used = reaction ID
0017d20c: 0805f48f j 0x0017d23c
0017d210: a2220017 sb r2,0x0017(r17)            store reaction occurred
0017d214: 3c028019 lui r2,0x8019
0017d218: 904238e9 lbu r2,0x38e9(r2)            load default to attack flag?
0017d21c: 00000000 nop
0017d220: 10400003 beq r2,r0,0x0017d230         branch if not defaulting to attack
0017d224: 00000000 nop
0017d228: 0805f48f j 0x0017d23c
0017d22c: a6200014 sh r0,0x0014(r17)            Store last attack used = attack
0017d230: 96620170 lhu r2,0x0170(r19)           load last attack used half from unit data
0017d234: 00000000 nop
0017d238: a6220014 sh r2,0x0014(r17)            store last attack used half from unit data
0017d23c: 3c028019 lui r2,0x8019
0017d240: 944238c6 lhu r2,0x38c6(r2)            load reaction ID
0017d244: 00000000 nop
0017d248: a622001a sh r2,0x001a(r17)            store reaction ID in misc. data
0017d24c: 3c028019 lui r2,0x8019
0017d250: 904238ed lbu r2,0x38ed(r2)            load can poach? post action?
0017d254: 00000000 nop
0017d258: 1040000e beq r2,r0,0x0017d294         branch if cannot
0017d25c: 3042007f andi r2,r2,0x007f            remove poach byte?
0017d260: a2220022 sb r2,0x0022(r17)            store cannot poach?
0017d264: 3c028019 lui r2,0x8019
0017d268: 904238ca lbu r2,0x38ca(r2)            load target new X coordinate
0017d26c: 00000000 nop
0017d270: a222001c sb r2,0x001c(r17)            store target X coordinate
0017d274: 3c028019 lui r2,0x8019
0017d278: 904238cb lbu r2,0x38cb(r2)            Y coordinate
0017d27c: 00000000 nop
0017d280: a222001d sb r2,0x001d(r17)            store new
0017d284: 3c028019 lui r2,0x8019
0017d288: 904238cc lbu r2,0x38cc(r2)            Elevation
0017d28c: 00000000 nop
0017d290: a222001e sb r2,0x001e(r17)            store new

0017d294: 3c028019 lui r2,0x8019
0017d298: 944238c8 lhu r2,0x38c8(r2)            some reaction/poach flag
0017d29c: 00000000 nop
0017d2a0: 1440001d bne r2,r0,0x0017d318         branch if != 0
0017d2a4: 34020001 ori r2,r0,0x0001             store 01 in 0x18 of current action data in misc. data
0017d2a8: 3c028019 lui r2,0x8019
0017d2ac: 904238ed lbu r2,0x38ed(r2)            load can poach?
0017d2b0: 00000000 nop
0017d2b4: 30420080 andi r2,r2,0x0080
0017d2b8: 14400017 bne r2,r0,0x0017d318         branch if ??
0017d2bc: 34020001 ori r2,r0,0x0001             store 01 in 0x18 of current action data in misc. data
0017d2c0: 3c028019 lui r2,0x8019
0017d2c4: 904238ed lbu r2,0x38ed(r2)            load aftermath byte?
0017d2c8: 00000000 nop
0017d2cc: 10400005 beq r2,r0,0x0017d2e4         branch if 0
0017d2d0: 34020001 ori r2,r0,0x0001
0017d2d4: a2220017 sb r2,0x0017(r17)            store post action occurrence
0017d2d8: a2220012 sb r2,0x0012(r17)            store animate on miss not true/no units hit
0017d2dc: 34020200 ori r2,r0,0x0200
0017d2e0: a6220014 sh r2,0x0014(r17)            store 0x200 flag on last ability used ID
0017d2e4: 3c028019 lui r2,0x8019
0017d2e8: 904238c3 lbu r2,0x38c3(r2)            load current hit counter
0017d2ec: 3c038019 lui r3,0x8019
0017d2f0: 906338c2 lbu r3,0x38c2(r3)            load number of hits
0017d2f4: 24420001 addiu r2,r2,0x0001           current hit counter++
0017d2f8: 3c018019 lui r1,0x8019
0017d2fc: a02238c3 sb r2,0x38c3(r1)             store current hit counter
0017d300: 3c028019 lui r2,0x8019
0017d304: 904238c3 lbu r2,0x38c3(r2)            load load it again
0017d308: 00000000 nop
0017d30c: 0043102b sltu r2,r2,r3                set if current hit counter < # hits
0017d310: 10400003 beq r2,r0,0x0017d320         branch if not
0017d314: 34020001 ori r2,r0,0x0001
0017d318: 0805f4c9 j 0x0017d324
0017d31c: a2220018 sb r2,0x0018(r17)            store continue attack?
0017d320: a2200018 sb r0,0x0018(r17)            store end attack
0017d324: 00001021 addu r2,r0,r0                return 0
0017d328: 8fbf0048 lw r31,0x0048(r29)
0017d32c: 8fb50044 lw r21,0x0044(r29)
0017d330: 8fb40040 lw r20,0x0040(r29)
0017d334: 8fb3003c lw r19,0x003c(r29)
0017d338: 8fb20038 lw r18,0x0038(r29)
0017d33c: 8fb10034 lw r17,0x0034(r29)
0017d340: 8fb00030 lw r16,0x0030(r29)
0017d344: 27bd0050 addiu r29,r29,0x0050
0017d348: 03e00008 jr r31
0017d34c: 00000000 nop

Notes

--X PRE FORMULA SECTION X--
 
 PREPARATION
 -Set 0x8018f4f4 to 0x00
 -Set 0x8018f4f8 to 0x00 (Linear attack flag)
 -Set 0x8019390f to 0x00 (Random fire Attack flag) 
 -Fill Stack 010 to 0x24 with 0xFF (will become Targeted units list)
 -Call Current_Action_Data_Nulling 2 times
    - 1st on Attacker's (by ID) Current action flags (0x18c to 0x1b5)
    - 2nd on 0x80192da0 (copy of Attacker's action data)
       -Reset 0x80193860 to 0x80193864 (Ability status to cancel)
       -Preserve last attack received (0x1b2) and reaction ID (0x19a) (both calls)
       -Set Hit% = 100% (both calls), Hit flag will be set to miss (after jal)
 -Set Attackers 0x18e (current action evade type) to 0x08 (canceled)
 -Clear some Attacker misc data
    - 0x19f (Math skill flag ?)
    - 0x1a2
    - 0x1ae
 
TARGETING  
-Check ACTION's TYPE ( 0x8018f5f0 )
  If REACTION  ( 0x8018f5f0 <> 0x00 )
       --> Jal Reaction_Target/Hit_Calculation will set the targets list matching reaction ID (0x80192d9c)
       - If Reaction is reflect r29 0x2c to 0x01 (else 0x00), will serve animate on miss purpose
       - If Reaction is supported by above routine, it will skip default targeting section
  If DEFAULT ACTION  ( 0x8018f5f0 = 0x00)
       - If Skillset is Maths (Attacker's 0x1 = 0x15) - Store 0x01 at Attacker misc 0x19f
       --> Jal Map calculations for attack - Lot of things happens here - Will set every kind of AoE / Seeks obstacles
                                           - Lot of Action menu/Skillset hardcoded shit too
                                           - Choose one tile for random fire abilities
                                           - If Targeting routines returns invalid data jump to END 
       TARGETING Done and valid
       - If Post Action Target (from 0x801938ef )is valid (<0x15) 
             - If 0x801938c8 <> 0x00  (Post action event ?) or 0x801938ed flag 0x80 is enabled (incoming fall)
             - Reset targeting Disable Green Panel Flags
             - Erase target list ? (0xff on stack 0x11 to 0x20)
             - Enable green panel flag on Post action Target Tile 0x05
       - SET A LIST OF TARGETED UNITS
             - List_and_Sort_Targeted_Units List of all Units on a green panel flag
             - Units are stored on r29 0x10 to 0x14
             - Unit number is stored at r29 0x28

--X FORMULA SECTION X--

Store number of targeted units at 0x801938ec (purpose ?) Store_Ability_Targets Only the first 0x10 ? Starts at 0x80193868 
Store used weapon ID at 0x801938d8 Store_used_weapon action menu hardcoded
LOOP Through all Targeted unit (r29 0x24 to r29 0x10)
     --> Pre Formula Setup (FDC)  (yeah !!!)
 
--X POST FORMULA SECTION X--  Store bunch of Attacker's misc data and determines if attack ends or not
 
Remove transparent status if Jump is used?
Count number of targets hit by ability - Remove some unit from Target list at 0x80193868 and store the list at Attacker misc 0x18e
                                       - Update Target number
Store new Target number at Attacker misc 
If Action type is not a reaction  ( 0x8018f5f0 = 0x00)
         - Set 0x801938e8 = 0x01 (can earn xp)
         - Set Attacker misc 0x1af to 0x00 (xp related ?)
Draw out routine dealing with experience gain deal with katana broken state (not xp) may overrides some special flags data
Store Attacker ID in Attacker's misc 0x18c
Store 0x00 in Attacker misc 0x1a3 (current strike counter)
Store Current ability used weapon ID (0x801938d8) in Attacker misc 0x1ab 
Store Strike counter (0x801938c3) at Attacker misc 0x1a5
Set target coordinates for ability? - Store (udpated) Targeted coordinates in Attacker misc 0x1a8,0x1a9,0x1aa
 
If There is no targeted units
       - Increase strike counter on 0x801938c3
       - Nullify Attacker misc 0x1a6 (reaction ID ?) 
       - Store Attacker 0x170 (last used ability) in Attacker misc 0x1a0
       - If no animation on miss (nor reflect reaction) set Attacker misc 0x19e to 0x01
       - Check Strike count (0x801938c3) Vs hit number (0x801938c2)
            - If no more strikes : store 0x00 in Attacker misc 0x1a4
            - If There's still strikes to deal : store 0x01 in Attacker misc 0x1a4
       - Jump to end with r2 = 0x01
   
If There were targeted units		
   - Set 0x00 in Attacker's misc 0x19e
   - Fill Attacker's misc 0x1a2 with 0x8019390e
   If Reaction ID (0x801938c6) <> 0x00 AND 0x801938c8 = 0x00 
         - Store Reaction ID in Attacker misc 0x1a0
         - Set Attacker misc 0x1a3 to 0x01
   Else : if 0x801938e9 <> 0x00  (weapon attack ?) : store 0x00 in Attacker misc 0x1a0
   Else : Store Attacker last used ability (0x170) in Attacker's misc 0x1a0
   Store Current ability Reaction ID (0x801938c6) in Attacker's misc 0x1a6
   Check 0x801938ed (Fall related) - if <> 0x00 
        - Fill Attacker's misc 0x1ae with 0x801938ed without 0x80 flag (Fall dmg calculated)
        - Fill Attacker's misc 0x1a8,0x1a9,0x1aa with current ability "new" coordinates 0x801938ca, 0x801938cb, 0x801938cc
   If 0x801938c8 <> 0x00 : incoming post ability events ? 
        - Store 0x01 in Attacker's misc 0x1a4 (Attack continues)
   Else If 0x801938ed 0x80 flag is enabled (Incoming fall) 
        - Store 0x01 in Attacker's misc 0x1a4 (Attack continues)
   Template:Else
        - If 0x801938ed <> 0x00 (Fall resolved) : Set Attacker's misc 0x1a3 = 0x01
                                                  Set Attacker's misc 0x19e = 0x01
                                                  Set Attacker's misc 0x1a0 (last used ability) = 0x200 (Fall ID ?)
        - Increases strike counter (0x801938c3)
        - Check Strike counter Vs Ability Hits numbers :
             - No more strikes : store 0x00 in Attacker's misc 0x1a4 (attack ends)
             - There's still strike to deal : set Attakcer misc 0x1a4 to 0x01 (Attack continues)
   Returns r2 = 0x00

(Very) Short Notes

Reset a bunch of action data (Unit data, Unit misc data, current ability data)
Set Targeting data (depend of weapon / ability flag / action menu)
 - List of targets
 - AoE : targeted tile have their green panel flag enabled (byte 0x05 flag 0x80)
LOOP through targeted unit and call Pre_Formula_Setup_(FDC) each times
Do some Post action stuff (update data, store data on attacker misc flags)
Increase strikes count, if = number of wanted hits - store "ends the attack flag"

Retun locations

00073f2c: Set_damage_display_type_based_on_ability
0019de38: AI_ability_processing