Difference between revisions of "Calculate Reaction Targetting & Usage"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
Returns:
 +
8018f5f0
 +
    0 if no reaction
 +
    1 if reaction occurs
 +
 
  0017e178: 27bdffd0 addiu r29,r29,0xffd0
 
  0017e178: 27bdffd0 addiu r29,r29,0xffd0
 
  0017e17c: afb50024 sw r21,0x0024(r29)
 
  0017e17c: afb50024 sw r21,0x0024(r29)
Line 11: Line 16:
 
  0017e1a0: afb20018 sw r18,0x0018(r29)
 
  0017e1a0: afb20018 sw r18,0x0018(r29)
 
  0017e1a4: afb10014 sw r17,0x0014(r29)
 
  0017e1a4: afb10014 sw r17,0x0014(r29)
  0017e1a8: 106200ee beq r3,r2,0x 0017e564 branch if reaction ID does not exist
+
  0017e1a8: 106200ee beq r3,r2,0x 0017e564 branch if acting unit ID does not exist
 
  0017e1ac: afb00010 sw r16,0x0010(r29) return r2= 0xff
 
  0017e1ac: afb00010 sw r16,0x0010(r29) return r2= 0xff
 
  0017e1b0: 00009821 addu r19,r0,r0
 
  0017e1b0: 00009821 addu r19,r0,r0
 
  0017e1b4: 34140001 ori r20,r0,0x0001
 
  0017e1b4: 34140001 ori r20,r0,0x0001
  0017e1b8: 2416ffff addiu r22,r0,0xffff
+
  0017e1b8: 2416ffff addiu r22,r0,0xffff r22 = -0x01
 +
<Loop>
 
  0017e1bc: 3c028019 lui r2,0x8019
 
  0017e1bc: 3c028019 lui r2,0x8019
 
  0017e1c0: 8c42f8c8 lw r2,-0x0738(r2) load acting unit ID
 
  0017e1c0: 8c42f8c8 lw r2,-0x0738(r2) load acting unit ID
 
  0017e1c4: 3c018019 lui r1,0x8019
 
  0017e1c4: 3c018019 lui r1,0x8019
  0017e1c8: ac20f5f0 sw r0,-0x0a10(r1) clear ??
+
  0017e1c8: ac20f5f0 sw r0,-0x0a10(r1) Set attack phase - initial attack
  0017e1cc: 126200de beq r19,r2,0x 0017e548 branch considered unit = acting unit
+
  0017e1cc: 126200de beq r19,r2,0x 0017e548 branch if considered unit = acting unit
 
  0017e1d0: 001310c0 sll r2,r19,0x03
 
  0017e1d0: 001310c0 sll r2,r19,0x03
 
  0017e1d4: 00531023 subu r2,r2,r19
 
  0017e1d4: 00531023 subu r2,r2,r19
Line 28: Line 34:
 
  0017e1e4: 00438821 addu r17,r2,r3
 
  0017e1e4: 00438821 addu r17,r2,r3
 
  0017e1e8: 02202021 addu r4,r17,r0
 
  0017e1e8: 02202021 addu r4,r17,r0
  0017e1ec: 0c0604c3 jal 0x0018130c weapon guard usability
+
  0017e1ec: 0c0604c3 jal 0x0018130c [[Weapon Guard Usability]] (check if unit can react)
 
  0017e1f0: 2632016e addiu r18,r17,0x016e r18 = targeting data
 
  0017e1f0: 2632016e addiu r18,r17,0x016e r18 = targeting data
  0017e1f4: 144000d4 bne r2,r0,0x 0017e548 branch if not usable?
+
  0017e1f4: 144000d4 bne r2,r0,0x 0017e548 branch if defending unit can't react
 
  0017e1f8: 340200ff ori r2,r0,0x00ff return 0xff
 
  0017e1f8: 340200ff ori r2,r0,0x00ff return 0xff
 
  0017e1fc: 92230001 lbu r3,0x0001(r17) load unit ID
 
  0017e1fc: 92230001 lbu r3,0x0001(r17) load unit ID
Line 36: Line 42:
 
  0017e204: 106200d0 beq r3,r2,0x 0017e548 branch if unit doesn't exist
 
  0017e204: 106200d0 beq r3,r2,0x 0017e548 branch if unit doesn't exist
 
  0017e208: 00000000 nop
 
  0017e208: 00000000 nop
  0017e20c: 0c06325a jal 0x0018c968 jump to see if unit reacts?
+
  0017e20c: 0c06325a jal 0x0018c968 [[Check if unit can react?]]
 
  0017e210: 02202021 addu r4,r17,r0
 
  0017e210: 02202021 addu r4,r17,r0
 
  0017e214: 9630019a lhu r16,0x019a(r17) load reaction ID
 
  0017e214: 9630019a lhu r16,0x019a(r17) load reaction ID
Line 56: Line 62:
 
  0017e250: 3c018019 lui r1,0x8019
 
  0017e250: 3c018019 lui r1,0x8019
 
  0017e254: ac34f5f0 sw r20,-0x0a10(r1) store 01 into control value
 
  0017e254: ac34f5f0 sw r20,-0x0a10(r1) store 01 into control value
  0017e258: 0c01788b jal 0x0005e22c
+
  0017e258: 0c01788b jal 0x0005e22c             [[Transfer Target ID? Through Mount Data]]
 
  0017e25c: 02402021 addu r4,r18,r0 jump to transfer target data
 
  0017e25c: 02402021 addu r4,r18,r0 jump to transfer target data
 
  0017e260: 3c018019 lui r1,0x8019
 
  0017e260: 3c018019 lui r1,0x8019
Line 81: Line 87:
 
  0017e2b4: 00000000 nop
 
  0017e2b4: 00000000 nop
  
  00174120: 8017e2d0 lb r23,-0x1d30(r0) - Meatbone
+
Table referred to in above code:
  00174124: 8017e2f8 lb r23,-0x1d08(r0) - Counter magic
+
  00174120: 8017e2d0 - Meatbone
  00174128: 8017e30c lb r23,-0x1cf4(r0) - Counter Tackle
+
  00174124: 8017e2f8 - Counter magic
  0017412c: 8017e31c lb r23,-0x1ce4(r0) - Counter Flood
+
  00174128: 8017e30c - Counter Tackle
  00174130: 8017e3f4 lb r23,-0x1c0c(r0) - Absorb used Mp
+
  0017412c: 8017e31c - Counter Flood
  00174134: 8017e3f4 lb r23,-0x1c0c(r0) - Gilgame Heart
+
  00174130: 8017e3f4 - Absorb used Mp
  00174138: 8017e2b8 lb r23,-0x1d48(r0) - Reflect
+
  00174134: 8017e3f4 - Gilgame Heart
  0017413c: 8017e360 lb r23,-0x1ca0(r0) - Auto Potion
+
  00174138: 8017e2b8 - Reflect
  00174140: 8017e3d0 lb r23,-0x1c30(r0) - Counter
+
  0017413c: 8017e360 - Auto Potion
 +
  00174140: 8017e3d0 - Counter
  
 
Reflect
 
Reflect
  0017e2b8: 0c05f964 jal 0x 0017e590 reflect/counter magic targeting
+
  0017e2b8: 0c05f964 jal 0x 0017e590 [[Counter magic targeting?]]
 
  0017e2bc: 02202021 addu r4,r17,r0
 
  0017e2bc: 02202021 addu r4,r17,r0
  0017e2c0: 2c420001 sltiu r2,r2,0x0001
+
  0017e2c0: 2c420001 sltiu r2,r2,0x0001 Set r2 = 1 if reflect succeeded
  0017e2c4: 00021023 subu r2,r0,r2
+
  0017e2c4: 00021023 subu r2,r0,r2 r2 = 0 if reflect failed, r2 = -0x1 if reflect succeeded
 
  0017e2c8: 0805f906 j 0x 0017e418
 
  0017e2c8: 0805f906 j 0x 0017e418
  0017e2cc: 30500003 andi r16,r2,0x0003
+
  0017e2cc: 30500003 andi r16,r2,0x0003 r16 = 0 if reflect failed, r16 = 0x03 if it succeeded
  
 
Meatbone Slash
 
Meatbone Slash
Line 103: Line 110:
 
  0017e2d4: 34050001 ori r5,r0,0x0001 skillset = attack
 
  0017e2d4: 34050001 ori r5,r0,0x0001 skillset = attack
 
  0017e2d8: 00003021 addu r6,r0,r0              ability = attack
 
  0017e2d8: 00003021 addu r6,r0,r0              ability = attack
  0017e2dc: 0c05f994 jal 0x 0017e650 Store Counter Ability
+
  0017e2dc: 0c05f994 jal 0x 0017e650 [[Store counter ability?]]
 
  0017e2e0: 34070001 ori r7,r0,0x0001
 
  0017e2e0: 34070001 ori r7,r0,0x0001
  0017e2e4: 14400041 bne r2,r0,0x 0017e3ec branch if ??
+
  0017e2e4: 14400041 bne r2,r0,0x 0017e3ec branch if ??  
 
  0017e2e8: 34020005 ori r2,r0,0x0005
 
  0017e2e8: 34020005 ori r2,r0,0x0005
  0017e2ec: a2540001 sb r20,0x0001(r18)
+
  0017e2ec: a2540001 sb r20,0x0001(r18) store last used skillset as 1 (attack)
 
  0017e2f0: 0805f906 j 0x 0017e418
 
  0017e2f0: 0805f906 j 0x 0017e418
  0017e2f4: a242000a sb r2,0x000a(r18) store reaction ID = 05?
+
  0017e2f4: a242000a sb r2,0x000a(r18) store reaction ID = 05? (tile specific? can't attack someone out of range with meatbone slash?)
  
 
Counter Magic
 
Counter Magic
Line 116: Line 123:
 
  0017e300: 00063400 sll r6,r6,0x10
 
  0017e300: 00063400 sll r6,r6,0x10
 
  0017e304: 0805f8d3 j 0x 0017e34c
 
  0017e304: 0805f8d3 j 0x 0017e34c
  0017e308: 00063403 sra r6,r6,0x10              ability = last attack recieved
+
  0017e308: 00063403 sra r6,r6,0x10              ability = last attack received
  
 
Counter Tackle
 
Counter Tackle
Line 125: Line 132:
  
 
Counter Flood
 
Counter Flood
  0017e31c: 0c060428 jal 0x001810a0 Map location calculation
+
  0017e31c: 0c060428 jal 0x001810a0 [[Map Location Calculation]]
 
  0017e320: 02202021 addu r4,r17,r0
 
  0017e320: 02202021 addu r4,r17,r0
 
  0017e324: 02202021 addu r4,r17,r0
 
  0017e324: 02202021 addu r4,r17,r0
Line 137: Line 144:
 
  0017e344: 00220821 addu r1,r1,r2
 
  0017e344: 00220821 addu r1,r1,r2
 
  0017e348: 9026e9d0 lbu r6,-0x1630(r1) get counter flood ability
 
  0017e348: 9026e9d0 lbu r6,-0x1630(r1) get counter flood ability
  0017e34c: 0c05f994 jal 0x 0017e650 Store Counter Ability
+
  0017e34c: 0c05f994 jal 0x 0017e650 [[Store counter ability?]]
 
  0017e350: 00003821 addu r7,r0,r0
 
  0017e350: 00003821 addu r7,r0,r0
  0017e354: 2c420001 sltiu r2,r2,0x0001
+
  0017e354: 2c420001 sltiu r2,r2,0x0001 if can store ability, 1.
 
  0017e358: 0805f906 j 0x 0017e418
 
  0017e358: 0805f906 j 0x 0017e418
  0017e35c: 00028040 sll r16,r2,0x01
+
  0017e35c: 00028040 sll r16,r2,0x01 r16 = 2 if could store, otherwise 0.
  
 
Auto Potion
 
Auto Potion
  0017e360: 0c05f9e0 jal 0x 0017e780 Auto Potion Routine
+
  0017e360: 0c05f9e0 jal 0x 0017e780 [[Auto Potion]] Routine
 
  0017e364: 02202021 addu r4,r17,r0
 
  0017e364: 02202021 addu r4,r17,r0
 
  0017e368: 00401821 addu r3,r2,r0
 
  0017e368: 00401821 addu r3,r2,r0
  0017e36c: 1076001f beq r3,r22,0x 0017e3ec branch if autopotion returned no inventory  
+
  0017e36c: 1076001f beq r3,r22,0x 0017e3ec branch if autopotion returned r22? (banned inventory ID? or -0x1?)
 
  0017e370: 34020006 ori r2,r0,0x0006
 
  0017e370: 34020006 ori r2,r0,0x0006
 
  0017e374: a2420001 sb r2,0x0001(r18) store 06 as used skillset ID? (attack)
 
  0017e374: a2420001 sb r2,0x0001(r18) store 06 as used skillset ID? (attack)
 
  0017e378: 34020005 ori r2,r0,0x0005
 
  0017e378: 34020005 ori r2,r0,0x0005
 
  0017e37c: a2430008 sb r3,0x0008(r18) store used item ID
 
  0017e37c: a2430008 sb r3,0x0008(r18) store used item ID
  0017e380: a242000a sb r2,0x000a(r18) store 05 into 0x178 in unit data
+
  0017e380: a242000a sb r2,0x000a(r18) store tile specific into 0x178 in unit data
 
  0017e384: a253000b sb r19,0x000b(r18) Store Target ID (0x11)
 
  0017e384: a253000b sb r19,0x000b(r18) Store Target ID (0x11)
 
  0017e388: 92220047 lbu r2,0x0047(r17) load X coordinate
 
  0017e388: 92220047 lbu r2,0x0047(r17) load X coordinate
Line 161: Line 168:
 
  0017e39c: a6420010 sh r2,0x0010(r18) store as target Y coordinate
 
  0017e39c: a6420010 sh r2,0x0010(r18) store as target Y coordinate
 
  0017e3a0: 96220048 lhu r2,0x0048(r17) load map level
 
  0017e3a0: 96220048 lhu r2,0x0048(r17) load map level
  0017e3a4: 34100002 ori r16,r0,0x0002
+
  0017e3a4: 34100002 ori r16,r0,0x0002 r16 = 2
 
  0017e3a8: 000213c2 srl r2,r2,0x0f
 
  0017e3a8: 000213c2 srl r2,r2,0x0f
 
  0017e3ac: 0c05f0f7 jal 0x 0017c3dc Jump to set status flags for display
 
  0017e3ac: 0c05f0f7 jal 0x 0017c3dc Jump to set status flags for display
Line 167: Line 174:
 
  0017e3b4: 00401821 addu r3,r2,r0
 
  0017e3b4: 00401821 addu r3,r2,r0
 
  0017e3b8: 340201b9 ori r2,r0,0x01b9
 
  0017e3b8: 340201b9 ori r2,r0,0x01b9
  0017e3bc: 1076000b beq r3,r22,0x 0017e3ec jump if returned value doesn't equal r22?
+
  0017e3bc: 1076000b beq r3,r22,0x 0017e3ec jump if returned value doesn't equal r22? (-0x1?)
 
  0017e3c0: a6220170 sh r2,0x0170(r17) store last attack used = 0x1b9 (auto potion)
 
  0017e3c0: a6220170 sh r2,0x0170(r17) store last attack used = 0x1b9 (auto potion)
  0017e3c4: 2462fffe addiu r2,r3,0xfffe
+
  0017e3c4: 2462fffe addiu r2,r3,0xfffe -0x3 (?)
 
  0017e3c8: 0805f8f9 j 0x 0017e3e4
 
  0017e3c8: 0805f8f9 j 0x 0017e3e4
  0017e3cc: 2c420002 sltiu r2,r2,0x0002
+
  0017e3cc: 2c420002 sltiu r2,r2,0x0002 r2 = 1 always ?
  
 
Counter
 
Counter
Line 177: Line 184:
 
  0017e3d4: 34050001 ori r5,r0,0x0001
 
  0017e3d4: 34050001 ori r5,r0,0x0001
 
  0017e3d8: 00003021 addu r6,r0,r0 Counter ability = attack
 
  0017e3d8: 00003021 addu r6,r0,r0 Counter ability = attack
  0017e3dc: 0c05f994 jal 0x 0017e650 store counter ability
+
  0017e3dc: 0c05f994 jal 0x 0017e650 [[Store counter ability?]]
 
  0017e3e0: 34070001 ori r7,r0,0x0001
 
  0017e3e0: 34070001 ori r7,r0,0x0001
  0017e3e4: 1040000d beq r2,r0,0x 0017e41c
+
  0017e3e4: 1040000d beq r2,r0,0x 0017e41c if couldn't store counter ability (?), otherwise branch
  0017e3e8: 2602ffff addiu r2,r16,0xffff
+
  0017e3e8: 2602ffff addiu r2,r16,0xffff r2 = 0
 
  0017e3ec: 0805f906 j 0x 0017e418
 
  0017e3ec: 0805f906 j 0x 0017e418
  0017e3f0: 00008021 addu r16,r0,r0
+
  0017e3f0: 00008021 addu r16,r0,r0 r16 = 0 (don't check silence/frog/mp)
  
 
All other reactions
 
All other reactions
 
  0017e3f4: 3c028019 lui r2,0x8019
 
  0017e3f4: 3c028019 lui r2,0x8019
  0017e3f8: 84422d9c lh r2,0x2d9c(r2) load current move ability ID? (reaction ID)
+
  0017e3f8: 84422d9c lh r2,0x2d9c(r2) load current reaction ID
 
  0017e3fc: 3c018006 lui r1,0x8006
 
  0017e3fc: 3c018006 lui r1,0x8006
 
  0017e400: 00220821 addu r1,r1,r2
 
  0017e400: 00220821 addu r1,r1,r2
 
  0017e404: 9022ea2a lbu r2,-0x15d6(r1) load reaction flags
 
  0017e404: 9022ea2a lbu r2,-0x15d6(r1) load reaction flags
 
  0017e408: 00000000 nop
 
  0017e408: 00000000 nop
  0017e40c: 30420030 andi r2,r2,0x0030 reaction flags check
+
  0017e40c: 30420030 andi r2,r2,0x0030 active/passive flag check?
  0017e410: 2c420001 sltiu r2,r2,0x0001 set if no flags are present
+
  0017e410: 2c420001 sltiu r2,r2,0x0001 1 if not active/passive
  0017e414: 00028023 subu r16,r0,r2
+
  0017e414: 00028023 subu r16,r0,r2 r16 = -1 if not active/passive. 0 otherwise
 +
There's smth weird going on with r16 here, I'm going to note down its interactions with the below, and you can form your own opinions:
 +
r16 < 0: do not check if unit can use ability (frog, silence, mp cost), do not transfer target data, do not set weapon data
 +
reactions with this result:
 +
A-Save, MA-Save, Speed save, sunken state, caution, Dragon Spirit, Regenerator, brave UP, Face UP, Hp restore, MP restore,
 +
Critical Quick, Absorb used MP, Gilgame Heart, Distribute, Damage Split (reactions outside 0x1b2 and 0x1ba with neither passive/active flags set)
 +
 +
r16 = 0: Do not check if unit can use ability, transfer unit data, do not set weapon data
 +
reactions with this result:
 +
Any reaction that fails and any reactions that fall outside the range of ID = 0x1b2 - 0x1ba with passive/active flags set
 +
 +
r16 = 1 or 2: Checks if unit can use ability (frog, silence, mp cost), do not transfer target data, set weapon data
 +
Reactions with this result:
 +
Auto Potion (2), Counter Flood (2), Counter Magic (2), Counter tackle (2), Meatbone slash (1)
 +
 +
r16 = 3: Do not check if unit can use ability, do not transfer unit data, set weapon data
 +
Reactions with this result:
 +
Reflect
  
 
+
  0017e418: 2602ffff addiu r2,r16,0xffff r2 = r16 - 1
  0017e418: 2602ffff addiu r2,r16,0xffff
+
  0017e41c: 2c420002 sltiu r2,r2,0x0002 set r2 = true if r16 = 2, or 1.
  0017e41c: 2c420002 sltiu r2,r2,0x0002
+
  0017e420: 10400006 beq r2,r0,0x 0017e43c branch if r16 <> 1 or 2
  0017e420: 10400006 beq r2,r0,0x 0017e43c
 
 
  0017e424: 00000000 nop
 
  0017e424: 00000000 nop
  0017e428: 0c05f688 jal 0x 0017da20 Half of MP/MP cost section
+
  0017e428: 0c05f688 jal 0x 0017da20 Half of MP/MP cost section if r16 = 1 or 2
 
  0017e42c: 02202021 addu r4,r17,r0
 
  0017e42c: 02202021 addu r4,r17,r0
  0017e430: 10400002 beq r2,r0,0x 0017e43c
+
  0017e430: 10400002 beq r2,r0,0x 0017e43c branch if unit can use ability
 
  0017e434: 00000000 nop
 
  0017e434: 00000000 nop
  0017e438: 00008021 addu r16,r0,r0
+
  0017e438: 00008021 addu r16,r0,r0 set r16 = 0 if unit just can't today.
  0017e43c: 16000007 bne r16,r0,0x 0017e45c
+
  0017e43c: 16000007 bne r16,r0,0x 0017e45c branch if r16 <> 0
  0017e440: 2602ffff addiu r2,r16,0xffff
+
  0017e440: 2602ffff addiu r2,r16,0xffff r2 = r16 - 1
 
  0017e444: 3c048019 lui r4,0x8019
 
  0017e444: 3c048019 lui r4,0x8019
 
  0017e448: 24843848 addiu r4,r4,0x3848
 
  0017e448: 24843848 addiu r4,r4,0x3848
  0017e44c: 0c01788b jal 0x0005e22c transfer target data
+
  0017e44c: 0c01788b jal 0x0005e22c transfer target data if r16 = 0
 
  0017e450: 02402821 addu r5,r18,r0
 
  0017e450: 02402821 addu r5,r18,r0
 
  0017e454: 0805f953 j 0x 0017e54c jump to end
 
  0017e454: 0805f953 j 0x 0017e54c jump to end
  0017e458: 26730001 addiu r19,r19,0x0001
+
  0017e458: 26730001 addiu r19,r19,0x0001 r19 + 1
  
  0017e45c: 2c420003 sltiu r2,r2,0x0003
+
  0017e45c: 2c420003 sltiu r2,r2,0x0003 set if r16 = 3, 2, or 1
  0017e460: 10400005 beq r2,r0,0x 0017e478
+
  0017e460: 10400005 beq r2,r0,0x 0017e478 branch if r16 = -1
 
  0017e464: 00000000 nop
 
  0017e464: 00000000 nop
  0017e468: 0c05f528 jal 0x 0017d4a0 set weapon data
+
  0017e468: 0c05f528 jal 0x 0017d4a0 [[Current Action Ability Data Setting / Multi Hit Formulas]] - if r16 = 1, 2, 3
 
  0017e46c: 02202021 addu r4,r17,r0
 
  0017e46c: 02202021 addu r4,r17,r0
 
  0017e470: 0805f94c j 0x 0017e530
 
  0017e470: 0805f94c j 0x 0017e530
Line 223: Line 246:
  
  
  0017e478: 3c018019 lui r1,0x8019
+
  0017e478: 3c018019 lui r1,0x8019 if r16 = -1
  0017e47c: a03438c2 sb r20,0x38c2(r1) Store # of hits
+
  0017e47c: a03438c2 sb r20,0x38c2(r1) Store # of hits as 1
 
  0017e480: 3c018019 lui r1,0x8019
 
  0017e480: 3c018019 lui r1,0x8019
  0017e484: a02038c3 sb r0,0x38c3(r1) Store weapon Hand?
+
  0017e484: a02038c3 sb r0,0x38c3(r1) Store weapon Hand (Right)
 
  0017e488: 3c018019 lui r1,0x8019
 
  0017e488: 3c018019 lui r1,0x8019
  0017e48c: a42038c8 sh r0,0x38c8(r1) clear post action? (reaction flag?)
+
  0017e48c: a42038c8 sh r0,0x38c8(r1) clear post action (reaction flag?)
 
  0017e490: 3c018019 lui r1,0x8019
 
  0017e490: 3c018019 lui r1,0x8019
  0017e494: a02038ed sb r0,0x38ed(r1) store no poach?
+
  0017e494: a02038ed sb r0,0x38ed(r1) store no poach
 
  0017e498: 9222001d lbu r2,0x001d(r17)
 
  0017e498: 9222001d lbu r2,0x001d(r17)
 
  0017e49c: 3c018019 lui r1,0x8019
 
  0017e49c: 3c018019 lui r1,0x8019
Line 239: Line 262:
 
  0017e4b0: 34020005 ori r2,r0,0x0005
 
  0017e4b0: 34020005 ori r2,r0,0x0005
 
  0017e4b4: a2400001 sb r0,0x0001(r18) store last skillset used = 0
 
  0017e4b4: a2400001 sb r0,0x0001(r18) store last skillset used = 0
  0017e4b8: a242000a sb r2,0x000a(r18) store reaction ID
+
  0017e4b8: a242000a sb r2,0x000a(r18) store reaction as tile specific
 
  0017e4bc: a253000b sb r19,0x000b(r18) store target ID
 
  0017e4bc: a253000b sb r19,0x000b(r18) store target ID
 
  0017e4c0: 3c038019 lui r3,0x8019
 
  0017e4c0: 3c038019 lui r3,0x8019
Line 245: Line 268:
 
  0017e4c8: 340201be ori r2,r0,0x01be
 
  0017e4c8: 340201be ori r2,r0,0x01be
 
  0017e4cc: 1462000e bne r3,r2,0x 0017e508 branch if not damage split
 
  0017e4cc: 1462000e bne r3,r2,0x 0017e508 branch if not damage split
 +
 +
Damage split (shift target to attacker)
 
  0017e4d0: 00000000 nop
 
  0017e4d0: 00000000 nop
 
  0017e4d4: 3c028019 lui r2,0x8019
 
  0017e4d4: 3c028019 lui r2,0x8019
Line 258: Line 283:
 
  0017e4fc: 3c038019 lui r3,0x8019
 
  0017e4fc: 3c038019 lui r3,0x8019
 
  0017e500: 246308cc addiu r3,r3,0x08cc
 
  0017e500: 246308cc addiu r3,r3,0x08cc
  0017e504: 00438821 addu r17,r2,r3 r17 = unit data?
+
  0017e504: 00438821 addu r17,r2,r3 r17 = acting unit's data
 +
 
 
  0017e508: 92220047 lbu r2,0x0047(r17) load target X coordinate
 
  0017e508: 92220047 lbu r2,0x0047(r17) load target X coordinate
 
  0017e50c: 00000000 nop
 
  0017e50c: 00000000 nop
Line 276: Line 302:
 
  0017e544: a2420000 sb r2,0x0000(r18) store target ID into attacker/self ID
 
  0017e544: a2420000 sb r2,0x0000(r18) store target ID into attacker/self ID
 
  0017e548: 26730001 addiu r19,r19,0x0001
 
  0017e548: 26730001 addiu r19,r19,0x0001
 +
 +
Loop Tail
 
  0017e54c: 2a620015 slti r2,r19,0x0015
 
  0017e54c: 2a620015 slti r2,r19,0x0015
 
  0017e550: 1440ff1a bne r2,r0,0x 0017e1bc      Check next unit for reactions
 
  0017e550: 1440ff1a bne r2,r0,0x 0017e1bc      Check next unit for reactions

Latest revision as of 05:19, 16 November 2022

Returns:
8018f5f0
    0 if no reaction
    1 if reaction occurs
0017e178: 27bdffd0 addiu r29,r29,0xffd0
0017e17c: afb50024 sw r21,0x0024(r29)
0017e180: 0080a821 addu r21,r4,r0
0017e184: 3c038019 lui r3,0x8019
0017e188: 8c63f8c8 lw r3,-0x0738(r3)
0017e18c: 2402ffff addiu r2,r0,0xffff
0017e190: afbf002c sw r31,0x002c(r29)
0017e194: afb60028 sw r22,0x0028(r29)
0017e198: afb40020 sw r20,0x0020(r29)
0017e19c: afb3001c sw r19,0x001c(r29)
0017e1a0: afb20018 sw r18,0x0018(r29)
0017e1a4: afb10014 sw r17,0x0014(r29)
0017e1a8: 106200ee beq r3,r2,0x 0017e564	branch if acting unit ID does not exist
0017e1ac: afb00010 sw r16,0x0010(r29)		return r2= 0xff
0017e1b0: 00009821 addu r19,r0,r0
0017e1b4: 34140001 ori r20,r0,0x0001
0017e1b8: 2416ffff addiu r22,r0,0xffff		r22 = -0x01

<Loop>

0017e1bc: 3c028019 lui r2,0x8019
0017e1c0: 8c42f8c8 lw r2,-0x0738(r2)		load acting unit ID
0017e1c4: 3c018019 lui r1,0x8019
0017e1c8: ac20f5f0 sw r0,-0x0a10(r1)		Set attack phase - initial attack
0017e1cc: 126200de beq r19,r2,0x 0017e548	branch if considered unit = acting unit
0017e1d0: 001310c0 sll r2,r19,0x03
0017e1d4: 00531023 subu r2,r2,r19
0017e1d8: 00021180 sll r2,r2,0x06
0017e1dc: 3c038019 lui r3,0x8019
0017e1e0: 246308cc addiu r3,r3,0x08cc		r4 = unit data		
0017e1e4: 00438821 addu r17,r2,r3
0017e1e8: 02202021 addu r4,r17,r0
0017e1ec: 0c0604c3 jal 0x0018130c		Weapon Guard Usability (check if unit can react)
0017e1f0: 2632016e addiu r18,r17,0x016e	r18 = targeting data
0017e1f4: 144000d4 bne r2,r0,0x 0017e548	branch if defending unit can't react
0017e1f8: 340200ff ori r2,r0,0x00ff		return 0xff
0017e1fc: 92230001 lbu r3,0x0001(r17)		load unit ID
0017e200: 00000000 nop
0017e204: 106200d0 beq r3,r2,0x 0017e548	branch if unit doesn't exist
0017e208: 00000000 nop
0017e20c: 0c06325a jal 0x0018c968		Check if unit can react?
0017e210: 02202021 addu r4,r17,r0
0017e214: 9630019a lhu r16,0x019a(r17)		load reaction ID
0017e218: 14400006 bne r2,r0,0x 0017e234	branch if unit doesn't/can't reacts
0017e21c: 3203ffff andi r3,r16,0xffff		r3 = reaction ID
0017e220: 3c028019 lui r2,0x8019
0017e224: 8c42f5fc lw r2,-0x0a04(r2)		load control value
0017e228: 00000000 nop
0017e22c: 14540004 bne r2,r20,0x 0017e240	branch if reacting is allowed (not = 01)
0017e230: 00000000 nop
0017e234: 340201b8 ori r2,r0,0x01b8
0017e238: 146200c3 bne r3,r2,0x 0017e548	branch if reaction is not "reflect"
0017e23c: 00000000 nop
0017e240: 120000c1 beq r16,r0,0x 0017e548	branch if reaction ID = 0
0017e244: 00000000 nop
0017e248: 3c058019 lui r5,0x8019
0017e24c: 24a53848 addiu r5,r5,0x3848		r5 = units targetting data address
0017e250: 3c018019 lui r1,0x8019
0017e254: ac34f5f0 sw r20,-0x0a10(r1)		store 01 into control value
0017e258: 0c01788b jal 0x0005e22c             Transfer Target ID? Through Mount Data
0017e25c: 02402021 addu r4,r18,r0		jump to transfer target data
0017e260: 3c018019 lui r1,0x8019
0017e264: a4302d9c sh r16,0x2d9c(r1)		store reaction ID
0017e268: a2530000 sb r19,0x0000(r18)		store counter = target ID?
0017e26c: a2400001 sb r0,0x0001(r18)		store last skillset used = 0
0017e270: 3c028019 lui r2,0x8019
0017e274: 94422d9c lhu r2,0x2d9c(r2)		load reaction ID
0017e278: 34100001 ori r16,r0,0x0001
0017e27c: a6420002 sh r2,0x0002(r18)		store reaction ID as last attack used
0017e280: 2442fe4e addiu r2,r2,0xfe4e		reaction ID - 1b2
0017e284: 00021400 sll r2,r2,0x10		
0017e288: 00021c03 sra r3,r2,0x10		
0017e28c: 962601b2 lhu r6,0x01b2(r17)		load last attack on self byte
0017e290: 2c620009 sltiu r2,r3,0x0009		set if reaction ID is between 0x1b2 and 0x1bb?
0017e294: 10400057 beq r2,r0,0x 0017e3f4	branch if not
0017e298: a620019a sh r0,0x019a(r17)		store reaction ID = 0
0017e29c: 00031080 sll r2,r3,0x02		
0017e2a0: 3c018017 lui r1,0x8017
0017e2a4: 00220821 addu r1,r1,r2
0017e2a8: 8c224120 lw r2,0x4120(r1)
0017e2ac: 00000000 nop
0017e2b0: 00400008 jr r2
0017e2b4: 00000000 nop

Table referred to in above code:

00174120: 8017e2d0  - Meatbone
00174124: 8017e2f8  - Counter magic
00174128: 8017e30c  - Counter Tackle
0017412c: 8017e31c  - Counter Flood
00174130: 8017e3f4  - Absorb used Mp
00174134: 8017e3f4  - Gilgame Heart
00174138: 8017e2b8  - Reflect
0017413c: 8017e360  - Auto Potion
00174140: 8017e3d0  - Counter

Reflect

0017e2b8: 0c05f964 jal 0x 0017e590		Counter magic targeting?	
0017e2bc: 02202021 addu r4,r17,r0
0017e2c0: 2c420001 sltiu r2,r2,0x0001		Set r2 = 1 if reflect succeeded
0017e2c4: 00021023 subu r2,r0,r2		r2 = 0 if reflect failed, r2 = -0x1 if reflect succeeded
0017e2c8: 0805f906 j 0x 0017e418
0017e2cc: 30500003 andi r16,r2,0x0003		r16 = 0 if reflect failed, r16 = 0x03 if it succeeded

Meatbone Slash

0017e2d0: 02202021 addu r4,r17,r0
0017e2d4: 34050001 ori r5,r0,0x0001		skillset = attack
0017e2d8: 00003021 addu r6,r0,r0               ability = attack
0017e2dc: 0c05f994 jal 0x 0017e650		Store counter ability?
0017e2e0: 34070001 ori r7,r0,0x0001		
0017e2e4: 14400041 bne r2,r0,0x 0017e3ec	branch if ?? 
0017e2e8: 34020005 ori r2,r0,0x0005
0017e2ec: a2540001 sb r20,0x0001(r18)		store last used skillset as 1 (attack)
0017e2f0: 0805f906 j 0x 0017e418
0017e2f4: a242000a sb r2,0x000a(r18)		store reaction ID = 05? (tile specific? can't attack someone out of range with meatbone slash?)

Counter Magic

0017e2f8: 02202021 addu r4,r17,r0
0017e2fc: 3405000b ori r5,r0,0x000b            skillset = black magic
0017e300: 00063400 sll r6,r6,0x10
0017e304: 0805f8d3 j 0x 0017e34c
0017e308: 00063403 sra r6,r6,0x10              ability = last attack received

Counter Tackle

0017e30c: 02202021 addu r4,r17,r0
0017e310: 3405000b ori r5,r0,0x000b            skillset = black magic?
0017e314: 0805f8f7 j 0x 0017e3dc
0017e318: 34060093 ori r6,r0,0x0093		store ability = dash

Counter Flood

0017e31c: 0c060428 jal 0x001810a0		Map Location Calculation
0017e320: 02202021 addu r4,r17,r0
0017e324: 02202021 addu r4,r17,r0
0017e328: 000210c0 sll r2,r2,0x03
0017e32c: 3c018019 lui r1,0x8019
0017e330: 00220821 addu r1,r1,r2
0017e334: 9022f8cc lbu r2,-0x0734(r1)		load tile data
0017e338: 34050011 ori r5,r0,0x0011            skillset = elemental
0017e33c: 3042003f andi r2,r2,0x003f				
0017e340: 3c018006 lui r1,0x8006
0017e344: 00220821 addu r1,r1,r2
0017e348: 9026e9d0 lbu r6,-0x1630(r1)		get counter flood ability
0017e34c: 0c05f994 jal 0x 0017e650		Store counter ability?
0017e350: 00003821 addu r7,r0,r0
0017e354: 2c420001 sltiu r2,r2,0x0001		if can store ability, 1.
0017e358: 0805f906 j 0x 0017e418
0017e35c: 00028040 sll r16,r2,0x01		r16 = 2 if could store, otherwise 0.

Auto Potion

0017e360: 0c05f9e0 jal 0x 0017e780		Auto Potion Routine
0017e364: 02202021 addu r4,r17,r0
0017e368: 00401821 addu r3,r2,r0
0017e36c: 1076001f beq r3,r22,0x 0017e3ec	branch if autopotion returned r22? (banned inventory ID? or -0x1?)
0017e370: 34020006 ori r2,r0,0x0006
0017e374: a2420001 sb r2,0x0001(r18)		store 06 as used skillset ID? (attack)
0017e378: 34020005 ori r2,r0,0x0005
0017e37c: a2430008 sb r3,0x0008(r18)		store used item ID
0017e380: a242000a sb r2,0x000a(r18)		store tile specific into 0x178 in unit data
0017e384: a253000b sb r19,0x000b(r18)		Store Target ID (0x11)
0017e388: 92220047 lbu r2,0x0047(r17)		load X coordinate
0017e38c: 00000000 nop
0017e390: a642000c sh r2,0x000c(r18)		store as target X coordinate
0017e394: 92220048 lbu r2,0x0048(r17)		load Y coordinate
0017e398: 02402021 addu r4,r18,r0		r4 = address to 0x16e in unit data
0017e39c: a6420010 sh r2,0x0010(r18)		store as target Y coordinate
0017e3a0: 96220048 lhu r2,0x0048(r17)		load map level
0017e3a4: 34100002 ori r16,r0,0x0002		r16 = 2
0017e3a8: 000213c2 srl r2,r2,0x0f		
0017e3ac: 0c05f0f7 jal 0x 0017c3dc		Jump to set status flags for display
0017e3b0: a642000e sh r2,0x000e(r18)		store map level
0017e3b4: 00401821 addu r3,r2,r0
0017e3b8: 340201b9 ori r2,r0,0x01b9
0017e3bc: 1076000b beq r3,r22,0x 0017e3ec	jump if returned value doesn't equal r22? (-0x1?)
0017e3c0: a6220170 sh r2,0x0170(r17)		store last attack used = 0x1b9 (auto potion)
0017e3c4: 2462fffe addiu r2,r3,0xfffe		-0x3 (?)
0017e3c8: 0805f8f9 j 0x 0017e3e4
0017e3cc: 2c420002 sltiu r2,r2,0x0002		r2 = 1 always ?

Counter

0017e3d0: 02202021 addu r4,r17,r0
0017e3d4: 34050001 ori r5,r0,0x0001
0017e3d8: 00003021 addu r6,r0,r0		Counter ability = attack
0017e3dc: 0c05f994 jal 0x 0017e650		Store counter ability?
0017e3e0: 34070001 ori r7,r0,0x0001		
0017e3e4: 1040000d beq r2,r0,0x 0017e41c	if couldn't store counter ability (?), otherwise branch
0017e3e8: 2602ffff addiu r2,r16,0xffff			r2 = 0
0017e3ec: 0805f906 j 0x 0017e418
0017e3f0: 00008021 addu r16,r0,r0		r16 = 0 (don't check silence/frog/mp)

All other reactions

0017e3f4: 3c028019 lui r2,0x8019
0017e3f8: 84422d9c lh r2,0x2d9c(r2)		load current reaction ID
0017e3fc: 3c018006 lui r1,0x8006
0017e400: 00220821 addu r1,r1,r2
0017e404: 9022ea2a lbu r2,-0x15d6(r1)		load reaction flags
0017e408: 00000000 nop
0017e40c: 30420030 andi r2,r2,0x0030		active/passive flag check?
0017e410: 2c420001 sltiu r2,r2,0x0001		1 if not active/passive
0017e414: 00028023 subu r16,r0,r2			r16 = -1 if not active/passive. 0 otherwise
There's smth weird going on with r16 here, I'm going to note down its interactions with the below, and you can form your own opinions:
r16 < 0: do not check if unit can use ability (frog, silence, mp cost), do not transfer target data, do not set weapon data
reactions with this result:
	A-Save, MA-Save, Speed save, sunken state, caution, Dragon Spirit, Regenerator, brave UP, Face UP, Hp restore, MP restore,
	Critical Quick, Absorb used MP, Gilgame Heart, Distribute, Damage Split (reactions outside 0x1b2 and 0x1ba with neither passive/active flags set)

r16 = 0: Do not check if unit can use ability, transfer unit data, do not set weapon data
reactions with this result:
	Any reaction that fails and any reactions that fall outside the range of ID = 0x1b2 - 0x1ba with passive/active flags set

r16 = 1 or 2: Checks if unit can use ability (frog, silence, mp cost), do not transfer target data, set weapon data
Reactions with this result:
	Auto Potion (2), Counter Flood (2), Counter Magic (2), Counter tackle (2), Meatbone slash (1)

r16 = 3: Do not check if unit can use ability, do not transfer unit data, set weapon data
Reactions with this result:
	Reflect
0017e418: 2602ffff addiu r2,r16,0xffff		r2 = r16 - 1
0017e41c: 2c420002 sltiu r2,r2,0x0002		set r2 = true if r16 = 2, or 1.
0017e420: 10400006 beq r2,r0,0x 0017e43c	branch if r16 <> 1 or 2
0017e424: 00000000 nop
0017e428: 0c05f688 jal 0x 0017da20		Half of MP/MP cost section if r16 = 1 or 2
0017e42c: 02202021 addu r4,r17,r0
0017e430: 10400002 beq r2,r0,0x 0017e43c	branch if unit can use ability
0017e434: 00000000 nop
0017e438: 00008021 addu r16,r0,r0		set r16 = 0 if unit just can't today.
0017e43c: 16000007 bne r16,r0,0x 0017e45c	branch if r16 <> 0
0017e440: 2602ffff addiu r2,r16,0xffff		r2 = r16 - 1
0017e444: 3c048019 lui r4,0x8019
0017e448: 24843848 addiu r4,r4,0x3848
0017e44c: 0c01788b jal 0x0005e22c		transfer target data if r16 = 0
0017e450: 02402821 addu r5,r18,r0
0017e454: 0805f953 j 0x 0017e54c		jump to end
0017e458: 26730001 addiu r19,r19,0x0001	r19 + 1
0017e45c: 2c420003 sltiu r2,r2,0x0003		set if r16 = 3, 2, or 1
0017e460: 10400005 beq r2,r0,0x 0017e478	branch if r16 = -1
0017e464: 00000000 nop
0017e468: 0c05f528 jal 0x 0017d4a0		Current Action Ability Data Setting / Multi Hit Formulas - if r16 = 1, 2, 3
0017e46c: 02202021 addu r4,r17,r0
0017e470: 0805f94c j 0x 0017e530
0017e474: 00000000 nop


0017e478: 3c018019 lui r1,0x8019		if r16 = -1
0017e47c: a03438c2 sb r20,0x38c2(r1)		Store # of hits as 1
0017e480: 3c018019 lui r1,0x8019
0017e484: a02038c3 sb r0,0x38c3(r1)		Store weapon Hand (Right)
0017e488: 3c018019 lui r1,0x8019
0017e48c: a42038c8 sh r0,0x38c8(r1)		clear post action (reaction flag?)
0017e490: 3c018019 lui r1,0x8019
0017e494: a02038ed sb r0,0x38ed(r1)		store no poach
0017e498: 9222001d lbu r2,0x001d(r17)
0017e49c: 3c018019 lui r1,0x8019
0017e4a0: a02238c4 sb r2,0x38c4(r1)		store right arm equip	
0017e4a4: 9222001f lbu r2,0x001f(r17)
0017e4a8: 3c018019 lui r1,0x8019
0017e4ac: a02238c5 sb r2,0x38c5(r1)		store left arm equip
0017e4b0: 34020005 ori r2,r0,0x0005
0017e4b4: a2400001 sb r0,0x0001(r18)		store last skillset used = 0
0017e4b8: a242000a sb r2,0x000a(r18)		store reaction as tile specific
0017e4bc: a253000b sb r19,0x000b(r18)		store target ID
0017e4c0: 3c038019 lui r3,0x8019
0017e4c4: 84632d9c lh r3,0x2d9c(r3)		load reaction ID
0017e4c8: 340201be ori r2,r0,0x01be		
0017e4cc: 1462000e bne r3,r2,0x 0017e508	branch if not damage split

Damage split (shift target to attacker)

0017e4d0: 00000000 nop
0017e4d4: 3c028019 lui r2,0x8019
0017e4d8: 9042f8c8 lbu r2,-0x0738(r2)		load acting unit ID
0017e4dc: 00000000 nop
0017e4e0: a242000b sb r2,0x000b(r18)		store acting unit ID as target ID
0017e4e4: 3c038019 lui r3,0x8019
0017e4e8: 8c63f8c8 lw r3,-0x0738(r3)		load acting unit ID
0017e4ec: 00000000 nop
0017e4f0: 000310c0 sll r2,r3,0x03
0017e4f4: 00431023 subu r2,r2,r3
0017e4f8: 00021180 sll r2,r2,0x06
0017e4fc: 3c038019 lui r3,0x8019
0017e500: 246308cc addiu r3,r3,0x08cc
0017e504: 00438821 addu r17,r2,r3		r17 = acting unit's data
0017e508: 92220047 lbu r2,0x0047(r17)		load target X coordinate
0017e50c: 00000000 nop
0017e510: a642000c sh r2,0x000c(r18)		store target X coordinate in target data
0017e514: 92220048 lbu r2,0x0048(r17)		Load target Y coordinate
0017e518: 00000000 nop
0017e51c: a6420010 sh r2,0x0010(r18)		store target Y coordinate in target data
0017e520: 96220048 lhu r2,0x0048(r17)		load Map level
0017e524: 00000000 nop
0017e528: 000213c2 srl r2,r2,0x0f
0017e52c: a642000e sh r2,0x000e(r18)		store map level
0017e530: 3c038019 lui r3,0x8019
0017e534: 94632d9c lhu r3,0x2d9c(r3)		load reaction ID
0017e538: 02601021 addu r2,r19,r0		r2 = target ID
0017e53c: a6a30000 sh r3,0x0000(r21)		store reaction ID onto stack
0017e540: 0805f959 j 0x 0017e564		jump to end
0017e544: a2420000 sb r2,0x0000(r18)		store target ID into attacker/self ID
0017e548: 26730001 addiu r19,r19,0x0001

Loop Tail

0017e54c: 2a620015 slti r2,r19,0x0015
0017e550: 1440ff1a bne r2,r0,0x 0017e1bc       Check next unit for reactions
0017e554: 2402ffff addiu r2,r0,0xffff
0017e558: 3c018019 lui r1,0x8019
0017e55c: ac20f5f0 sw r0,-0x0a10(r1)		store 0 in action byte?
0017e560: a6a00000 sh r0,0x0000(r21)		store 0 as reaction ID
0017e564: 8fbf002c lw r31,0x002c(r29)
0017e568: 8fb60028 lw r22,0x0028(r29)
0017e56c: 8fb50024 lw r21,0x0024(r29)
0017e570: 8fb40020 lw r20,0x0020(r29)
0017e574: 8fb3001c lw r19,0x001c(r29)
0017e578: 8fb20018 lw r18,0x0018(r29)
0017e57c: 8fb10014 lw r17,0x0014(r29)
0017e580: 8fb00010 lw r16,0x0010(r29)
0017e584: 27bd0030 addiu r29,r29,0x0030
0017e588: 03e00008 jr r31
0017e58c: 00000000 nop