Set some data for current attack

From Final Fantasy Hacktics Wiki
Revision as of 19:07, 21 May 2022 by Orkney (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
 Check for absence or 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 keeping r3 at 0x00
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 
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 (keeping r3 = 0x00)
0018ba84: 00000000 nop                               |
0018ba88: 34030001 ori r3,r0,0x0001              #E   r3 = 0x01 (if target is dead and death not canceled/cancelable)
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  /Else branch (keeping r3 = 0x00)
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 (keeping r3 = 0x00)
0018bac0: 00000000 nop                               |
0018bac4: 34030001 ori r3,r0,0x0001                  |r3 = 0x01 (target is and remains petrified)
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 (keeping r3 = 0x00)
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 (keeping r3 = 0x00)
0018bafc: 00000000 nop                           | 
0018bb00: 34030001 ori r3,r0,0x0001                  |r3 = 0x01 
0018bb04: 10600016 beq r3,r0,0x0018bb60     #if target is and remains dead, petridied or walled   / Else branch (avoiding nullification)
0018bb08: 00000000 nop                      

                       --- ACTION NULLIFICATION SECTION ---  if target is and remains dead, petridied or walled
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  delete Target ID from 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 0x38c8 and update TCA 0x11 unchecking 0x02
0018bb30: 00000000 nop                      |
0018bb34: 0c062f4d jal 0x0018bd34           |-->Remove_Knockback_Flag
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   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
  
                       --- IT'S OK SECTION ---  Not dead, petrified or walled or status will be canceled
0018bb60: 3c038019 lui r3,0x8019            
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
0018bb78: 00000000 nop                      | 
0018bb7c: a0600000 sb r0,0x0000(r3)              |Store 0x00 in TCA hit flag (miss)
0018bb80: 3c038019 lui r3,0x8019                 |
0018bb84: 8c632d90 lw r3,0x2d90(r3)              |r3 = Target current action data pointer
0018bb88: 00000000 nop                           |
0018bb8c: 84620004 lh r2,0x0004(r3)         |r2 =  Target current action 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 
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 = Target current action data pointer
0018bbac: 00000000 nop                      |
0018bbb0: 84620006 lh r2,0x0006(r3)         |r2 =  Target current action 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
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)         |r3 = Target current action data pointer
0018bbd0: 00000000 nop                      |
0018bbd4: 84620008 lh r2,0x0008(r3)         |r2 =  Target current action MP Damage
0018bbd8: 00000000 nop                      |
0018bbdc: 284203e8 slti r2,r2,0x03e8        |r2 = 0x01 if MP damage < 1000
0018bbe0: 14400002 bne r2,r0,0x0018bbec     #If MP dmg > 1000 
0018bbe4: 340203e7 ori r2,r0,0x03e7              |r2 = 0x3e7
0018bbe8: a4620008 sh r2,0x0008(r3)              |Store max mp dmg = 999
0018bbec: 3c038019 lui r3,0x8019                 |
0018bbf0: 8c632d90 lw r3,0x2d90(r3)         |r3 = Target current action data pointer
0018bbf4: 00000000 nop                      |
0018bbf8: 8462000a lh r2,0x000a(r3)         |r2 =  Target current action MP recovery
0018bbfc: 00000000 nop                      |
0018bc00: 284203e8 slti r2,r2,0x03e8        |r2 = 0x01 if MP recovery < 1000
0018bc04: 14400002 bne r2,r0,0x0018bc10     #If MP recovery > 1000 
0018bc08: 340203e7 ori r2,r0,0x03e7              |r2 = 0x3e7
0018bc0c: a462000a sh r2,0x000a(r3)              |Store max mp recovery = 999
0018bc10: 3c028019 lui r2,0x8019                 |
0018bc14: 8c422d90 lw r2,0x2d90(r2)         |r2 = Target current action data pointer
0018bc18: 3c038019 lui r3,0x8019            |
0018bc1c: 8c632d98 lw r3,0x2d98(r3)         |r3 = Target data pointer
0018bc20: 84420004 lh r2,0x0004(r2)         |r2 = Target current action hp dmg 
0018bc24: 94630028 lhu r3,0x0028(r3)        |r3 = Target HP 
0018bc28: 00000000 nop                      |
0018bc2c: 0043102a slt r2,r2,r3             |r2 = 0x01 if HP dmg < Target HP
0018bc30: 14400005 bne r2,r0,0x0018bc48     #If HP dmg > Target HP (killing blow)   / Else branch (avoiding two next jal)
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 0x38c8 and update TCA 0x11 unchecking 0x02
0018bc44: 00000000 nop                           |
0018bc48: 3c028019 lui r2,0x8019            xxx Golem Check Section xxx
0018bc4c: 8c422d98 lw r2,0x2d98(r2)         |r2 = Target data pointer
0018bc50: 3c058019 lui r5,0x8019            |
0018bc54: 8ca52d90 lw r5,0x2d90(r5)         |r5 = Target current action data pointer
0018bc58: 904201ba lbu r2,0x01ba(r2)        |r2 = target modified ENTD flags
0018bc5c: 90a30025 lbu r3,0x0025(r5)        |r3 = Target current action 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 attack type is not nothing / Else branch to end
0018bc68: 00022102 srl r4,r2,0x04                |r4 = 0x02 if green team - 0x03 if light blue - 0x01 if red
0018bc6c: 90a20000 lbu r2,0x0000(r5)             |r2 = Target current action hit flag
0018bc70: 00000000 nop                           |
0018bc74: 1040001a beq r2,r0,0x0018bce0          #If target current action don't miss  / Else branch to end
0018bc78: 00000000 nop                               |
0018bc7c: 3c028019 lui r2,0x8019                     |
0018bc80: 8c42f5f0 lw r2,-0x0a10(r2)                 |r2 = Type of action
0018bc84: 00000000 nop                               |
0018bc88: 14400015 bne r2,r0,0x0018bce0              #If action is not reaction  / Else branch to end
0018bc8c: 00041040 sll r2,r4,0x01                        |r2 = 0x02 if red team, 0x04 if green, 0x06 if light blue
0018bc90: 3c018019 lui r1,0x8019                         |
0018bc94: 00220821 addu r1,r1,r2                         |r1 = 0x8019xxxx (0x02, 0x04 or 0x06 depend of team)
0018bc98: 9422f5f4 lhu r2,-0x0a0c(r1)                    |r2 = Target team Golem amount
0018bc9c: 00000000 nop                                   |
0018bca0: 1040000f beq r2,r0,0x0018bce0                  #If Target team Golem amount <> 0   / Else branch to end
0018bca4: 00000000 nop                                         
0018bca8: 3c028019 lui r2,0x8019                             |
0018bcac: 904238f5 lbu r2,0x38f5(r2)                         |r2 = current ability flag 3 
0018bcb0: 00000000 nop                                       |
0018bcb4: 30420008 andi r2,r2,0x0008                         |r2 = 0x08 if normal attack is checked / else 0x00
0018bcb8: 10400009 beq r2,r0,0x0018bce0                      #If current ability is  a normal attack   / Else branch to end
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

00187274 : HP Absorbtion
001872e8 : HP Absorbtion
00187494 : MP Recovery Routine
0018b220 : Perform reaction abilities
0018b9a4 : Pre Formula Setup (FDC)