Set some data for current attack

From Final Fantasy Hacktics Wiki
Revision as of 20:38, 10 June 2021 by Orkney (talk | contribs) (Step by step)
Jump to navigation Jump to search
Check for cancelable death/petrify/wall 
 If not : nullify a lot of data
 If ok : Cap Hp and Mp amounts - Deal with killing blows (avoiding knockback and reaction) - Deal with golem
-----------------------------------------------------------------------------------------------------------
0018ba44: 3c028019 lui r2,0x8019
0018ba48: 8c422d98 lw r2,0x2d98(r2)            r2 = target data pointer
0018ba4c: 27bdffe8 addiu r29,r29,0xffe8
0018ba50: afbf0010 sw r31,0x0010(r29)
0018ba54: 90440058 lbu r4,0x0058(r2)           r4 = 1st set of Target current statuses
0018ba58: 00000000 nop
0018ba5c: 30820020 andi r2,r4,0x0020           r2 = 0x20 if target is dead / else 0x00
0018ba60: 1040000a beq r2,r0,0x0018ba8c        #If target is dead /else branch
0018ba64: 00001821 addu r3,r0,r0               |r3 = 0x00
0018ba68: 3c028019 lui r2,0x8019                    |
0018ba6c: 90423860 lbu r2,0x3860(r2)                |r2 = Current ability 1st set of canceled status 
0018ba70: 00000000 nop                              |
0018ba74: 30420020 andi r2,r2,0x0020                |r2 = 0x20 if death is canceled / else 0x00
0018ba78: 10400003 beq r2,r0,0x0018ba88             #if death will be canceled / branch if not 
0018ba7c: 30820010 andi r2,r4,0x0010                     |r2 = 0x10 if target is undead / Else = 0x00                 
0018ba80: 10400002 beq r2,r0,0x0018ba8c                  #If Target is undead / Else branch (Avoid r3 = 0x01)
0018ba84: 00000000 nop                                       |
0018ba88: 34030001 ori r3,r0,0x0001                 E# r3 = 0x01 
0018ba8c: 3c028019 lui r2,0x8019               
0018ba90: 8c422d98 lw r2,0x2d98(r2)            r2 = target data pointer
0018ba94: 00000000 nop
0018ba98: 90420059 lbu r2,0x0059(r2)           r2 = 2nd set of Target current statuses
0018ba9c: 00000000 nop
0018baa0: 30420080 andi r2,r2,0x0080           r2 = 0x80 if target has petrify / Else 0x00
0018baa4: 10400008 beq r2,r0,0x0018bac8        #If target has petrify // branch if not petrify
0018baa8: 00000000 nop                             |
0018baac: 3c028019 lui r2,0x8019                   |
0018bab0: 90423861 lbu r2,0x3861(r2)               |r2 = Current ability 2nd set of canceled status 
0018bab4: 00000000 nop                             |
0018bab8: 30420080 andi r2,r2,0x0080               |r2 = 0x80 if petrify will be canceled
0018babc: 14400002 bne r2,r0,0x0018bac8            #If Petrify is not going to be canceled / Else branch 
0018bac0: 00000000 nop                             
0018bac4: 34030001 ori r3,r0,0x0001			         |r3 = 0x01
0018bac8: 3c028019 lui r2,0x8019               
0018bacc: 8c422d98 lw r2,0x2d98(r2)            r2 = target data pointer
0018bad0: 00000000 nop
0018bad4: 9042005b lbu r2,0x005b(r2)           r2 = 4th set of Target current statuses
0018bad8: 00000000 nop
0018badc: 30420001 andi r2,r2,0x0001           r2 = 0x01 if target has wall / Else 0x00
0018bae0: 10400008 beq r2,r0,0x0018bb04		# If target has wall / Else branch
0018bae4: 00000000 nop                             |
0018bae8: 3c028019 lui r2,0x8019                   |
0018baec: 90423863 lbu r2,0x3863(r2)               |r2 = Current ability 4th set of canceled status      
0018baf0: 00000000 nop                             |
0018baf4: 30420001 andi r2,r2,0x0001               |r2 = 0x01 if wall is going to be canceled
0018baf8: 14400002 bne r2,r0,0x0018bb04		    #If r2 = 0x00 (Wall is not canceled) else branch
0018bafc: 00000000 nop                                 |
0018bb00: 34030001 ori r3,r0,0x0001                    |r3 = 0x01 
0018bb04: 10600016 beq r3,r0,0x0018bb60		#If r3 <> 0x00 / Else branch (avoiding nullification)
0018bb08: 00000000 nop                             |
                                                   |
xxx ACTION NULLIFICATION if target has/is Death not cancelled - Undead dead - Petrify not canceled - Wall not canceled xxx
0018bb0c: 3c028019 lui r2,0x8019				    |
0018bb10: 8c422d98 lw r2,0x2d98(r2)                |r2 = target data pointer
0018bb14: 00000000 nop                             |
0018bb18: 9044018a lbu r4,0x018a(r2)               |r4 = Target unit ID
0018bb1c: 0c063b5f jal 0x0018ed7c                  |--> Sort_target_list
0018bb20: 00000000 nop                             |
0018bb24: 0c062b7d jal 0x0018adf4                  |--> Action_data_nulling Nullify most of data of TCA and Attacker current action
0018bb28: 00000000 nop                             |
0018bb2c: 0c062f3c jal 0x0018bcf0                  |--> Called_by_Nullify_Action - Nullify current ability 0x38c6 and 0x3828 and update TCA 0x11 unchecking 0x02
0018bb30: 00000000 nop                             |
0018bb34: 0c062f4d jal 0x0018bd34                  |--> Remove_Knockback_Flag (ex : ?Nullify steal item?)
0018bb38: 00000000 nop                             |
0018bb3c: 3c018019 lui r1,0x8019                   |
0018bb40: a020390e sb r0,0x390e(r1)                |Store ability formula = 0x00 at 0x8019390e
0018bb44: 0c0610c3 jal 0x0018430c                  |--> Force_Attack_Miss Attack miss - Hit% = 0 - Evade type = 0x07
0018bb48: 00000000 nop                             |
0018bb4c: 3c038019 lui r3,0x8019                   |
0018bb50: 8c632d90 lw r3,0x2d90(r3)                |r3 = Target current action date pointer
0018bb54: 34020008 ori r2,r0,0x0008                |r2 = 0x0008 
0018bb58: 08062f38 j 0x0018bce0                    >Jump to end
0018bb5c: a0620002 sb r2,0x0002(r3)                |Store Evade type = 0x08
  
R3 = 0x00 Section (default - and death-petrify-wall if canceled)
0018bb60: 3c038019 lui r3,0x8019               E# Action is not status nullified
0018bb64: 8c632d90 lw r3,0x2d90(r3)                |r3 = Target current action data pointer
0018bb68: 00000000 nop                             |
0018bb6c: 8462002a lh r2,0x002a(r3)                |r2 = Target current action (TCA) hit %
0018bb70: 00000000 nop                             |
0018bb74: 14400004 bne r2,r0,0x0018bb88            |If Hit% = 0x00 / Else branch 
0018bb78: 00000000 nop                                 |
0018bb7c: a0600000 sb r0,0x0000(r3)                    |Store 0x00 in TCA hit flag
0018bb80: 3c038019 lui r3,0x8019                       |
0018bb84: 8c632d90 lw r3,0x2d90(r3)                    |r3 = TCA data pointer
0018bb88: 00000000 nop                             |
0018bb8c: 84620004 lh r2,0x0004(r3)                |r2 = TCA hp damage
0018bb90: 00000000 nop                             |
0018bb94: 284203e8 slti r2,r2,0x03e8               |r2 = 0x01 if HP dmg < 1000
0018bb98: 14400002 bne r2,r0,0x0018bba4            #If HP dmg > 1000 / Else branch
0018bb9c: 340203e7 ori r2,r0,0x03e7                    |r2 = 0x3e7
0018bba0: a4620004 sh r2,0x0004(r3)                    |Store TCA hp damage = 999
0018bba4: 3c038019 lui r3,0x8019                   |
0018bba8: 8c632d90 lw r3,0x2d90(r3)                |r3 = TCA data pointer
0018bbac: 00000000 nop                             |
0018bbb0: 84620006 lh r2,0x0006(r3)                |r2 = TCA Hp recovery
0018bbb4: 00000000 nop                             |     
0018bbb8: 284203e8 slti r2,r2,0x03e8               |r2 = 0x01 if HP recovery < 1000
0018bbbc: 14400004 bne r2,r0,0x0018bbd0            #If HP recovery > 1000 / Else branch
0018bbc0: 340203e7 ori r2,r0,0x03e7                    |r2 = 0x3e7
0018bbc4: a4620006 sh r2,0x0006(r3)                    |Store TCA hp recovery = 999
0018bbc8: 3c038019 lui r3,0x8019
0018bbcc: 8c632d90 lw r3,0x2d90(r3)                |Same for MP damage (cap at 999)
0018bbd0: 00000000 nop
0018bbd4: 84620008 lh r2,0x0008(r3)
0018bbd8: 00000000 nop
0018bbdc: 284203e8 slti r2,r2,0x03e8
0018bbe0: 14400002 bne r2,r0,0x0018bbec
0018bbe4: 340203e7 ori r2,r0,0x03e7
0018bbe8: a4620008 sh r2,0x0008(r3)                |Store max mp dmg = 999			
0018bbec: 3c038019 lui r3,0x8019
0018bbf0: 8c632d90 lw r3,0x2d90(r3)              
0018bbf4: 00000000 nop
0018bbf8: 8462000a lh r2,0x000a(r3)
0018bbfc: 00000000 nop
0018bc00: 284203e8 slti r2,r2,0x03e8
0018bc04: 14400002 bne r2,r0,0x0018bc10
0018bc08: 340203e7 ori r2,r0,0x03e7
0018bc0c: a462000a sh r2,0x000a(r3)                |Store max mp recovery = 999
0018bc10: 3c028019 lui r2,0x8019
0018bc14: 8c422d90 lw r2,0x2d90(r2)                |r2 = TCA data pointer
0018bc18: 3c038019 lui r3,0x8019
0018bc1c: 8c632d98 lw r3,0x2d98(r3)                |r3 = Target data pointer
0018bc20: 84420004 lh r2,0x0004(r2)                |r2 = TCA hp dmg 
0018bc24: 94630028 lhu r3,0x0028(r3)               |r3 = Target HP 
0018bc28: 00000000 nop
0018bc2c: 0043102a slt r2,r2,r3                    |r2 = 0x01 if TCA HP dmg < Target HP	
0018bc30: 14400005 bne r2,r0,0x0018bc48            #If r2 = 0x00 - HP dmg > Target HP (killing blow) / Else branch
0018bc34: 00000000 nop                                 |
0018bc38: 0c062f4d jal 0x0018bd34                      |--> Remove_Knockback_Flag 
0018bc3c: 00000000 nop                                 |
0018bc40: 0c062f3c jal 0x0018bcf0                      |--> Called_by_Nullify_Action Nullify current ability 0x38c6 and 0x3828 and update TCA 0x11 unchecking 0x02
0018bc44: 00000000 nop
0018bc48: 3c028019 lui r2,0x8019            xxx Golem Section xxx
0018bc4c: 8c422d98 lw r2,0x2d98(r2)                |r2 = Target data pointer
0018bc50: 3c058019 lui r5,0x8019
0018bc54: 8ca52d90 lw r5,0x2d90(r5)                |r5 = TCA data pointer
0018bc58: 904201ba lbu r2,0x01ba(r2)               |r2 = target modified ENTD flags
0018bc5c: 90a30025 lbu r3,0x0025(r5)               |r3 = TCA attack type
0018bc60: 30420030 andi r2,r2,0x0030               |r2 = 0x30 if target is light blue team - 0x20 if green team? - 0x10 if red
0018bc64: 1060001e beq r3,r0,0x0018bce0            #If r3 <> 0 - attack type is something / Else branch to end  //// branch if not changing to enemy team
0018bc68: 00022102 srl r4,r2,0x04                      |r4 = 0x01 if green team - 0x02 if light blue - 0x00 if red /// flags / 16
0018bc6c: 90a20000 lbu r2,0x0000(r5)                   |r2 = TCA hit flag		
0018bc70: 00000000 nop                                 |
0018bc74: 1040001a beq r2,r0,0x0018bce0                #If r2 <> 0 - TCA hit / Else branch to end
0018bc78: 00000000 nop                                     |
0018bc7c: 3c028019 lui r2,0x8019                           |
0018bc80: 8c42f5f0 lw r2,-0x0a10(r2)		            |r2 = Type of action load AI calc / reaction chcek
0018bc84: 00000000 nop                                     |
0018bc88: 14400015 bne r2,r0,0x0018bce0                    #If r2 = 0x00 - not reacting / branch to end if reacting
0018bc8c: 00041040 sll r2,r4,0x01                              |r2 = Team*2
0018bc90: 3c018019 lui r1,0x8019                               |
0018bc94: 00220821 addu r1,r1,r2                               |r1 = 0x8019xxxx(team * 2)			
0018bc98: 9422f5f4 lhu r2,-0x0a0c(r1)                          |load Teams Golem amount
0018bc9c: 00000000 nop                                         |
0018bca0: 1040000f beq r2,r0,0x0018bce0                        #If Golem amount <> 0 / Else Branch to end
0018bca4: 00000000 nop                                             |                                 
0018bca8: 3c028019 lui r2,0x8019                                   |
0018bcac: 904238f5 lbu r2,0x38f5(r2)                               |r2 = ability flag 3 
0018bcb0: 00000000 nop                                             |
0018bcb4: 30420008 andi r2,r2,0x0008                               |r2 = 0x08 if normal attack / else 0x00
0018bcb8: 10400009 beq r2,r0,0x0018bce0                            #If r2 <> 0 - normal attack/ branch if not normal attack
0018bcbc: 3402000a ori r2,r0,0x000a                                    |r2 = 0x0a
0018bcc0: a0a20002 sb r2,0x0002(r5)                                    |store evade type = 0x0a (Golem)
0018bcc4: 3c048019 lui r4,0x8019                                       |
0018bcc8: 8c842d90 lw r4,0x2d90(r4)                                    |r4 = TCA data pointer
0018bccc: 34028000 ori r2,r0,0x8000                                    |r2 = 0x8000
0018bcd0: 0c062f75 jal 0x0018bdd4                                      |--> Null Some Status Data Nullify Current ability status infliction and removal bytes
0018bcd4: a4a20010 sh r2,0x0010(r5)                                    store 0x8000 into special flags unknown 
0018bcd8: 0c062f4d jal 0x0018bd34                                      |--> Remove_Knockback_Flag
0018bcdc: 00000000 nop
0018bce0: 8fbf0010 lw r31,0x0010(r29)
0018bce4: 27bd0018 addiu r29,r29,0x0018
0018bce8: 03e00008 jr r31
0018bcec: 00000000 nop

Return Locations

00187248 : HP Absorbtion
0018748c : MP Recovery Routine
0018b220 : Perform reaction abilities
0018b9a4 : Pre Formula Setup (FDC)