Current Action Ability Data Setting / Multi Hit Formulas
(Redirected from Determining Multi Hit Formulas)
Jump to navigation
Jump to search
0017d4a0 - 0017d704 Notes Parameters: r4 = Acting unit's data pointer Clear/Reset some Current ability byte Store Ability number of Hits ( 0x801938c2 ) Store Ability Primary and secondary weapons ( 0x801938c4 0x801938c5 ) Might store Ability data 2 flag 1 at 0x8018f7ec ------------------------------------------------------------------------ 0017d4a0: 27bdffe8 addiu r29,r29,-0x0018 | 0017d4a4: 3c038019 lui r3,0x8019 | 0017d4a8: 8c63f5f0 lw r3,-0x0a10(r3) |r3 = Type of action 8018f5f0 / 8018f5f0 0017d4ac: 34020001 ori r2,r0,0x0001 |r2 = 0x01 0017d4b0: afbf0014 sw r31,0x0014(r29) | 0017d4b4: afb00010 sw r16,0x0010(r29) | 0017d4b8: 3c018019 lui r1,0x8019 | 0017d4bc: a02238c2 sb r2,0x38c2(r1) |Store default number of hits = 0x01 at 0x801938c2 801938c2 0017d4c0: 3c018019 lui r1,0x8019 | 0017d4c4: a02038c3 sb r0,0x38c3(r1) |Clear strike counter at 0x801938c3 801938c3 0017d4c8: 3c018019 lui r1,0x8019 | 0017d4cc: a42038c8 sh r0,0x38c8(r1) |clear 0x801938c8 Set to 0x01 if an ability proc - 801938c8 0017d4d0: 3c018019 lui r1,0x8019 | 0017d4d4: a02038ed sb r0,0x38ed(r1) |clear 0x801938ed Fall related - 801938ed 0017d4d8: 14600009 bne r3,r0,0x0017d500 #If Action is not a reaction 0017d4dc: 00002821 addu r5,r0,r0 |r5 = 0x00 0017d4e0: 3c018019 lui r1,0x8019 |r1 = 0x80190000 0017d4e4: a02038e8 sb r0,0x38e8(r1) |Clear 0x801938e8 - can learn experience 801938e8 0017d4e8: 3c018019 lui r1,0x8019 | 0017d4ec: a02038e7 sb r0,0x38e7(r1) |Clear 0x801938e7 - experience earned 801938e7 0017d4f0: 3c018019 lui r1,0x8019 | 0017d4f4: a020390c sb r0,0x390c(r1) |clear 0x8019390c - ability type ? 8019390c 0017d4f8: 3c018019 lui r1,0x8019 | 0017d4fc: a020390d sb r0,0x390d(r1) |clear 0x8019390d - ability element ? 8019390d 0017d500: 9082016f lbu r2,0x016f(r4) |r2 = Acting unit last used skillset 0017d504: 3c018006 lui r1,0x8006 | 0017d508: 00220821 addu r1,r1,r2 |r1 = 0x80060000 + skillset offset 0017d50c: 90265cb4 lbu r6,0x5cb4(r1) |r6 = Acting unit last used action menu 0x80065cb4 / 80065cb4 0017d510: 3c018019 lui r1,0x8019 | 0017d514: a020f7ec sb r0,-0x0814(r1) |clear used ability flag 1 at 0x8018f7ec 0x8018f7ec 0017d518: 9082001d lbu r2,0x001d(r4) |r2 = Acting unit's right hand weapon 0017d51c: 3c018019 lui r1,0x8019 | 0017d520: a02238c4 sb r2,0x38c4(r1) |Store right hand weapon ID in 0x801938c4 - Current ability primary weapon 0x801938c4 0017d524: 9082001f lbu r2,0x001f(r4) |r2 = Acting unit's left hand weapon 0017d528: 3c038019 lui r3,0x8019 | 0017d52c: 906338c4 lbu r3,0x38c4(r3) |r3 = Acting unit's right hand weapon 0017d530: 3c018019 lui r1,0x8019 | 0017d534: a02238c5 sb r2,0x38c5(r1) |store left hand weapon ID at 0x801938c5 - Current ability secondary weapon 0017d538: 340200ff ori r2,r0,0x00ff |r2 = 0x0ff 0017d53c: 14620008 bne r3,r2,0x0017d560 #If Acting unit's right hand weapon doesn't exist (= 0xff) - swap weapons 0017d540: 30c300ff andi r3,r6,0x00ff |r3 = Used Action menu byte 0017d544: 9083001f lbu r3,0x001f(r4) |r3 = Acting unit's left hand weapon 0017d548: 340200ff ori r2,r0,0x00ff |r2 = 0xff 0017d54c: 3c018019 lui r1,0x8019 | 0017d550: a02238c5 sb r2,0x38c5(r1) |Store no secondary weapon at 0x801938c5 0017d554: 3c018019 lui r1,0x8019 | 0017d558: a02338c4 sb r3,0x38c4(r1) |Store left hand weapon ID in primary weapon at 0x801938c4 0017d55c: 30c300ff andi r3,r6,0x00ff |r3 = Used Action menu byte 0017d560: 34020002 ori r2,r0,0x0002 |r2 = 0x02 0017d564: 14620006 bne r3,r2,0x0017d580 #If Used action menu is Weapon Inventory 0017d568: 00000000 nop | 0017d56c: 90820176 lbu r2,0x0176(r4) |r2 = Acting unit's used item/equip ID 0017d570: 3c018019 lui r1,0x8019 | 0017d574: a02238c4 sb r2,0x38c4(r1) |store used item as primary weapon at 0x801938c4 0017d578: 0805f5bd j 0x0017d6f4 >>jump to END 0017d57c: 00000000 nop | 0017d580: 10600003 beq r3,r0,0x0017d590 #If Used action menu is not default (<> 0x00) 0017d584: 34020006 ori r2,r0,0x0006 |r2 = 0x06 0017d588: 1462002b bne r3,r2,0x0017d638 #If Used action menu is Monster 0017d58c: 30c300ff andi r3,r6,0x00ff |r3 = Used Action menu byte 0017d590: 84830170 lh r3,0x0170(r4) #E | r3 = Acting unit's used Ability ID 0017d594: 00000000 nop | 0017d598: 04610004 bgez r3,0x0017d5ac #If Used Ability ID < 0x00 /WTF ? (if > 0x00 branch without checking potion ?) 0017d59c: 000310c0 sll r2,r3,0x03 |r2 = Ability ID * 8 0017d5a0: 28620170 slti r2,r3,0x0170 |r2 = 0x01 if ability ID < 0x170 (?) 0017d5a4: 1040000b beq r2,r0,0x0017d5d4 #If Ability < Potion /Else skip ability data 2 section (inneficient check ??) 0017d5a8: 000310c0 sll r2,r3,0x03 |r2 = Ability ID * 8 0017d5ac: 00431023 subu r2,r2,r3 |r2 = Ability ID * 7 0017d5b0: 00021040 sll r2,r2,0x01 |r2 = Ability ID * 14 0017d5b4: 3c038006 lui r3,0x8006 | 0017d5b8: 2463fbf0 addiu r3,r3,0xfbf0 |r3 = Start of Ability data 2 0x8005fbf0 0017d5bc: 00431021 addu r2,r2,r3 |r2 = Start of Used Ability data 2 0017d5c0: 90430003 lbu r3,0x0003(r2) |r3 = Used ability Flags 1 0017d5c4: 3c018019 lui r1,0x8019 | 0017d5c8: a023f7ec sb r3,-0x0814(r1) |Store used ability flags 1 at 0x8018f7ec 0017d5cc: 90500009 lbu r16,0x0009(r2) |r16 = Used ability X 0017d5d0: 90450008 lbu r5,0x0008(r2) |r5 = Used Ability Formula 0017d5d4: 00000000 nop | 0017d5d8: 24a2ffe2 addiu r2,r5,-0x001e |r2 = Ability formula - 0x1e 0017d5dc: 2c420002 sltiu r2,r2,0x0002 |r2 = 0x01 if formula is 0x1e pr 0x1f 0017d5e0: 10400010 beq r2,r0,0x0017d624 #If Used Ability's formula is 0x1e or 0x1f #branch if not 0017d5e4: 30a300ff andi r3,r5,0x00ff |r3 = ability formula 0017d5e8: 3c028019 lui r2,0x8019 | 0017d5ec: 8c42f5fc lw r2,-0x0a04(r2) |r2 = Action State 0017d5f0: 00000000 nop | 0017d5f4: 1440000c bne r2,r0,0x0017d628 #If Action is been executed 0017d5f8: 3402005e ori r2,r0,0x005e |r2 = 0x5e 0017d5fc: 0c0088c3 jal 0x0002230c |-->Random_Number_Generator Return r2 between 0 and 0x7fff 0017d600: 00000000 nop | 0017d604: 02020018 mult r16,r2 |Ability X*Random 0017d608: 00001012 mflo r2 |r2 = Ability X*Random 0017d60c: 04410002 bgez r2,0x0017d618 #If r2 < 0x00 0017d610: 00000000 nop | 0017d614: 24427fff addiu r2,r2,0x7fff |r2 = positive value 0017d618: 000213c3 sra r2,r2,0x0f |r2 = Random between 0 and X-1 (X * Rand / (Max Rand +1)) 0017d61c: 0805f5bb j 0x0017d6ec >>jump to store number of hits 0017d620: 24420001 addiu r2,r2,0x0001 |r2 = number of hits (random +1) 0017d624: 3402005e ori r2,r0,0x005e |r2 = 0x5e 0017d628: 14620003 bne r3,r2,0x0017d638 #If Used ability formula is 0x5e 0017d62c: 30c300ff andi r3,r6,0x00ff |r3 = ability formula 0017d630: 0805f5bb j 0x0017d6ec >>jump to store number of hits (X+1) 0017d634: 26020001 addiu r2,r16,0x0001 |r2 = ability X + 1 0017d638: 34020009 ori r2,r0,0x0009 |r2 = 0x09 0017d63c: 1062002d beq r3,r2,0x0017d6f4 #If Used action menu is not Jump /If action = jump, branch to END 0017d640: 34020008 ori r2,r0,0x0008 |r2 = 0x08 0017d644: 10620009 beq r3,r2,0x0017d66c #If Used action menu is not Attack /If Action menu = Attack branch to frog/2 swords check 0017d648: 3402000a ori r2,r0,0x000a | 0017d64c: 10620007 beq r3,r2,0x0017d66c #If Used action menu is not charge /If Action menu = Charge branch to frog/2 swords check 0017d650: 00000000 nop | 0017d654: 3c028019 lui r2,0x8019 |r2 = 0x80190000 0017d658: 9042f7ec lbu r2,-0x0814(r2) |r2 = used ability flags 1 0017d65c: 00000000 nop | 0017d660: 30420020 andi r2,r2,0x0020 |r2 = 0x20 if Ability is weapon ranged 0017d664: 10400023 beq r2,r0,0x0017d6f4 #If Ability is weapon ranged /Else jump to END 0017d668: 00000000 nop | 0017d66c: 9082005a lbu r2,0x005a(r4) #E #E |r2 = Acting unit current status 3 0017d670: 90850091 lbu r5,0x0091(r4) |r5 = Acting unit support 3 0017d674: 30420002 andi r2,r2,0x0002 |r2 = 0x02 if Acting unit is frogged 0017d678: 14400006 bne r2,r0,0x0017d694 #If Not frogged /If frogged branch to weapon nullification 0017d67c: 340200ff ori r2,r0,0x00ff | 0017d680: 90820006 lbu r2,0x0006(r4) |r2 = Acting unit gender 0017d684: 00000000 nop | 0017d688: 30420020 andi r2,r2,0x0020 |r2 = 0x20 if acting unit is a monter 0017d68c: 10400005 beq r2,r0,0x0017d6a4 #If acting unit is a monster /Else branch avoiding weapon nullification 0017d690: 340200ff ori r2,r0,0x00ff |r2 = 0x0ff 0017d694: 3c018019 lui r1,0x8019 #E | r1 = 0x80190000 0017d698: a02238c4 sb r2,0x38c4(r1) |store no right hand weapon (0xff) 0017d69c: 3c018019 lui r1,0x8019 | 0017d6a0: a02238c5 sb r2,0x38c5(r1) |store no left hand weapon (0xff) 0017d6a4: 3c048019 lui r4,0x8019 |r4 = 0x80190000 0017d6a8: 248438c4 addiu r4,r4,0x38c4 |r4 = 0x801938c4 0017d6ac: 94830000 lhu r3,0x0000(r4) |r3 = right & left hand weapon ID 0017d6b0: 3402ffff ori r2,r0,0xffff |r2 = 0xffff 0017d6b4: 1062000a beq r3,r2,0x0017d6e0 #If there's at least one weapon /No weapons ID (fist) branch to 2 swords check 0017d6b8: 340300ff ori r3,r0,0x00ff |r3 = 0x0ff 0017d6bc: 90820000 lbu r2,0x0000(r4) |r2 = right hand weapon ID 0017d6c0: 00000000 nop | 0017d6c4: 1043000b beq r2,r3,0x0017d6f4 #If right hand weapon exists /Else branch to END 0017d6c8: 00000000 nop | 0017d6cc: 3c028019 lui r2,0x8019 |r2 = 0x80190000 0017d6d0: 904238c5 lbu r2,0x38c5(r2) |r2 = left hand weapon ID 0017d6d4: 00000000 nop | 0017d6d8: 10430006 beq r2,r3,0x0017d6f4 # if left hand weapon exists /Else branch to END 0017d6dc: 00000000 nop | 0017d6e0: 30a20001 andi r2,r5,0x0001 #E | r2 = 0x01 if Unit has Two Swords in support 0017d6e4: 10400003 beq r2,r0,0x0017d6f4 #If Two swords is active /Else branch to END 0017d6e8: 34020002 ori r2,r0,0x0002 |r2 = 0x02 0017d6ec: 3c018019 lui r1,0x8019 | 0017d6f0: a02238c2 sb r2,0x38c2(r1) |store number of hits at 0x801938c2 0017d6f4: 8fbf0014 lw r31,0x0014(r29) 0017d6f8: 8fb00010 lw r16,0x0010(r29) 0017d6fc: 27bd0018 addiu r29,r29,0x0018 0017d700: 03e00008 jr r31 0017d704: 00000000 nop
Notes
Clear : - 0x801938c3 (strike counter) - 0x801938c8 (proc ? post action event ?) - 0x801938ed (Fall related) - If Action is not a reaction - 0x801938e8 (can earn xp) - 0x801938e7 (exp earned) - 0x8019390c (?) - 0x8019390d (?) 0x8018f7ec (Ability data 2 flag 1) - Set to 0x00 (default value) - Filled with ability data 2 flag 1 if used action menu is default or monster 0x801938c2 - Number of hits - Set to 0x01 (default) - Depending of formula if Used Action Menu is default or monster (there is an ability ID check that seems to be bad written) - Set to Random (1 to Ability X) if Ability Formula is 0x1e or 0x1f - Set to X+1 is formula is 0x5e - Else : - If Action menu is [Attack or Charge] or Ability is weapon ranged - AND if unit has two weapons and the 2 swords ability --> Set to 0x02 0x801938c4 (Ability primary weapon) - Filled with unit right hand weapon (default) - Filled with unit left hand weapon if no right hand weapon (0xff) - Filled with used item if action menu is katana inventory - Forced to 0xff if Unit is a frog or a monster 0x801938c5 (Ability secondary weapon) - Filled with left hand weapon ID - Set to 0xff if there's no right hand weapon - Set to 0xff if Unit is a monster or a frog
Return locations
Battle.bin 0017caa0: Prep_Current_Action_Data 0017e100: Big..._Contains_Hamedo_check 0017e470: Main_reaction_routine? 0017f1cc: Calculate_Projected_Action_Effect