Difference between revisions of "Main Ability Loading Routine"
Jump to navigation
Jump to search
(→Notes) |
m (→Notes) |
||
Line 442: | Line 442: | ||
- '''There's still strike to deal : set Attakcer misc 0x1a4 to 0x01 (Attack continues)''' | - '''There's still strike to deal : set Attakcer misc 0x1a4 to 0x01 (Attack continues)''' | ||
Returns r2 = 0x00 | 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=== | ===Retun locations=== | ||
00073f2c: [[Set_damage_display_type_based_on_ability]] | 00073f2c: [[Set_damage_display_type_based_on_ability]] | ||
0019de38: [[AI_ability_processing]] | 0019de38: [[AI_ability_processing]] |
Revision as of 20:19, 20 February 2022
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