Difference between revisions of "00180f40 - 00180fe0"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
<font face='Courier New'>
+
Parameters : r4 = Target data pointer
 
   
 
   
  00180f40: 27bdffd8 addiu r29,r29,0xffd8
+
Returns nothing
  00180f44: afb10014 sw r17,0x0014(r29)
+
  00180f48: 00808821 addu r17,r4,r0
+
Disable all innate status, status immunities, current status, inflict status, and status CT (Morbolization prep)
  00180f4c: afb00010 sw r16,0x0010(r29)
+
Note : Preventing status from being canceled here is not sufficient, there's another routine that might do it.
  00180f50: 00008021 addu r16,r0,r0
+
-------------------------------------------------------------------------------------------------------------
  00180f54: afb3001c sw r19,0x001c(r29)
+
  00180f40: 27bdffd8 addiu r29,r29,-0x0028    |
  00180f58: 34130080 ori r19,r0,0x0080
+
  00180f44: afb10014 sw r17,0x0014(r29)       |
  00180f5c: afbf0020 sw r31,0x0020(r29)
+
  00180f48: 00808821 addu r17,r4,r0           |{{f/adr|<nowiki>r17 = Unit data pointer</nowiki>}}
  00180f60: afb20018 sw r18,0x0018(r29)
+
  00180f4c: afb00010 sw r16,0x0010(r29)       |
  00180f64: 9232018a lbu r18,0x018a(r17)
+
  00180f50: 00008021 addu r16,r0,r0           |{{f/std|<nowiki>r16 = 0x00 (loop counter)</nowiki>}}
  00180f68: 06010002 bgez r16,0x00180f74
+
  00180f54: afb3001c sw r19,0x001c(r29)       |
  00180f6c: 02001021 addu r2,r16,r0
+
  00180f58: 34130080 ori r19,r0,0x0080       |{{f/std|<nowiki>r19 = 0x80 (will be used as bitmask)</nowiki>}}
  00180f70: 26020007 addiu r2,r16,0x0007
+
  00180f5c: afbf0020 sw r31,0x0020(r29)       |
  00180f74: 000210c3 sra r2,r2,0x03
+
  00180f60: afb20018 sw r18,0x0018(r29)       |
  00180f78: 32030007 andi r3,r16,0x0007
+
  00180f64: 9232018a lbu r18,0x018a(r17)     |{{f/load|<nowiki>r18 = Unit Raw iD (without 0xff check)</nowiki>}}
  00180f7c: 02221021 addu r2,r17,r2
+
                                            {{f/bloop|LOOP - through each status (40 iterations)}}
  00180f80: 90420058 lbu r2,0x0058(r2)
+
  00180f68: 06010002 bgez r16,0x00180f74         {{f/Cond|If loop counter < 0}}    {{f/std|Never ?}}
  00180f84: 00731807 srav r3,r19,r3
+
  00180f6c: 02001021 addu r2,r16,r0               |{{f/std|<nowiki>r2 = loop counter</nowiki>}}
  00180f88: 00431024 and r2,r2,r3
+
  00180f70: 26020007 addiu r2,r16,0x0007             |{{f/std|<nowiki>r2 = counter + 0x07</nowiki>}}
  00180f8c: 10400004 beq r2,r0,0x00180fa0
+
  00180f74: 000210c3 sra r2,r2,0x03               |{{f/std|<nowiki>r2 = This iteration status set (counter / 8)</nowiki>}}
  00180f90: 26040001 addiu r4,r16,0x0001
+
  00180f78: 32030007 andi r3,r16,0x0007           |{{f/std|<nowiki>r3 = Status bit position in its set</nowiki>}}
  00180f94: 00002821 addu r5,r0,r0
+
  00180f7c: 02221021 addu r2,r17,r2               |{{f/adr|This iteration Status set pointer}}
  00180f98: 0c01a3a0 jal 0x00068e80 special status flag enabling
+
  00180f80: 90420058 lbu r2,0x0058(r2)           |{{f/load|This iteration set of  Current status}}
  00180f9c: 02403021 addu r6,r18,r0
+
  00180f84: 00731807 srav r3,r19,r3               |{{f/std|<nowiki>r3 = This iteration bitmask</nowiki>}}
  00180fa0: 26100001 addiu r16,r16,0x0001
+
  00180f88: 00431024 and r2,r2,r3                 |{{f/std|r2 <> 0x00 if this iteration status is enabled in Unit current status}}
  00180fa4: 2a020028 slti r2,r16,0x0028
+
  00180f8c: 10400004 beq r2,r0,0x00180fa0         {{f/Cond|If This iteration status is in Unit current status}}
  00180fa8: 1440ffef bne r2,r0,0x00180f68
+
  00180f90: 26040001 addiu r4,r16,0x0001             |{{f/std|<nowiki>r4 = Status number + 1</nowiki>}}
  00180fac: 2624004e addiu r4,r17,0x004e
+
  00180f94: 00002821 addu r5,r0,r0                   |{{f/std|<nowiki>r5 = Removal flag (for incoming routine)</nowiki>}}
  00180fb0: 0c017991 jal 0x0005e644 data nullifying
+
  00180f98: 0c01a3a0 jal 0x00068e80                   |{{f/jal|Special_Status_Flag_Enabling%3F|Special_Status_Flag_Enabling%3F}}
  00180fb4: 3405001f ori r5,r0,0x001f
+
  00180f9c: 02403021 addu r6,r18,r0                   |{{f/std|<nowiki>r6 = Unit ID</nowiki>}}
  00180fb8: 262401bb addiu r4,r17,0x01bb
+
  00180fa0: 26100001 addiu r16,r16,0x0001         |{{f/std|counter + 1}}
  00180fbc: 0c017991 jal 0x0005e644 data nullifying
+
  00180fa4: 2a020028 slti r2,r16,0x0028           |{{f/std|check counter limit}}
  00180fc0: 34050005 ori r5,r0,0x0005
+
  00180fa8: 1440ffef bne r2,r0,0x00180f68     {{f/eloop|Loop 40 times}}
 +
  00180fac: 2624004e addiu r4,r17,0x004e     |{{f/adr|Unit innate status pointer}}
 +
  00180fb0: 0c017991 jal 0x0005e644           |{{f/jal|Data_Nullifying|Data_Nullifying}} Nullify Innate status, status immunities and current status
 +
  00180fb4: 3405001f ori r5,r0,0x001f         |{{f/std|<nowiki>r5 = size of data to nullify</nowiki>}}
 +
  00180fb8: 262401bb addiu r4,r17,0x01bb     |{{f/adr|Unit inflicted status pointer}}
 +
  00180fbc: 0c017991 jal 0x0005e644           |{{f/jal|Data_Nullifying|Data_Nullifying}} Nullify inflicted status
 +
  00180fc0: 34050005 ori r5,r0,0x0005         |{{f/std|<nowiki>r5 = size of data to nullify</nowiki>}}
 
  00180fc4: 8fbf0020 lw r31,0x0020(r29)
 
  00180fc4: 8fbf0020 lw r31,0x0020(r29)
 
  00180fc8: 8fb3001c lw r19,0x001c(r29)
 
  00180fc8: 8fb3001c lw r19,0x001c(r29)
Line 42: Line 48:
 
  00180fdc: 03e00008 jr r31
 
  00180fdc: 03e00008 jr r31
 
  00180fe0: 00000000 nop
 
  00180fe0: 00000000 nop
</font>
+
===Return location===
 +
'''Battle.bin'''
 +
0018c290: [[Attack_Finalisation_%26_Reaction_Flagging]]

Revision as of 21:19, 20 November 2022

Parameters : r4 = Target data pointer

Returns nothing

Disable all innate status, status immunities, current status, inflict status, and status CT (Morbolization prep)
Note : Preventing status from being canceled here is not sufficient, there's another routine that might do it.
-------------------------------------------------------------------------------------------------------------
00180f40: 27bdffd8 addiu r29,r29,-0x0028    |
00180f44: afb10014 sw r17,0x0014(r29)       |
00180f48: 00808821 addu r17,r4,r0           |r17 = Unit data pointer
00180f4c: afb00010 sw r16,0x0010(r29)       |
00180f50: 00008021 addu r16,r0,r0           |r16 = 0x00 (loop counter)
00180f54: afb3001c sw r19,0x001c(r29)       |
00180f58: 34130080 ori r19,r0,0x0080        |r19 = 0x80 (will be used as bitmask)
00180f5c: afbf0020 sw r31,0x0020(r29)       |
00180f60: afb20018 sw r18,0x0018(r29)       |
00180f64: 9232018a lbu r18,0x018a(r17)      |r18 = Unit Raw iD (without 0xff check)
                                            @LOOP - through each status (40 iterations)
00180f68: 06010002 bgez r16,0x00180f74          #If loop counter < 0    Never ?
00180f6c: 02001021 addu r2,r16,r0               |r2 = loop counter
00180f70: 26020007 addiu r2,r16,0x0007              |r2 = counter + 0x07
00180f74: 000210c3 sra r2,r2,0x03               |r2 = This iteration status set (counter / 8)
00180f78: 32030007 andi r3,r16,0x0007           |r3 = Status bit position in its set
00180f7c: 02221021 addu r2,r17,r2               |This iteration Status set pointer
00180f80: 90420058 lbu r2,0x0058(r2)            |This iteration set of  Current status
00180f84: 00731807 srav r3,r19,r3               |r3 = This iteration bitmask
00180f88: 00431024 and r2,r2,r3                 |r2 <> 0x00 if this iteration status is enabled in Unit current status
00180f8c: 10400004 beq r2,r0,0x00180fa0         #If This iteration status is in Unit current status
00180f90: 26040001 addiu r4,r16,0x0001              |r4 = Status number + 1
00180f94: 00002821 addu r5,r0,r0                    |r5 = Removal flag (for incoming routine)
00180f98: 0c01a3a0 jal 0x00068e80                   |-->Special_Status_Flag_Enabling%3F
00180f9c: 02403021 addu r6,r18,r0                   |r6 = Unit ID
00180fa0: 26100001 addiu r16,r16,0x0001         |counter + 1
00180fa4: 2a020028 slti r2,r16,0x0028           |check counter limit
00180fa8: 1440ffef bne r2,r0,0x00180f68     Λ Loop 40 times
00180fac: 2624004e addiu r4,r17,0x004e      |Unit innate status pointer
00180fb0: 0c017991 jal 0x0005e644           |-->Data_Nullifying Nullify Innate status, status immunities and current status
00180fb4: 3405001f ori r5,r0,0x001f         |r5 = size of data to nullify
00180fb8: 262401bb addiu r4,r17,0x01bb      |Unit inflicted status pointer
00180fbc: 0c017991 jal 0x0005e644           |-->Data_Nullifying Nullify inflicted status
00180fc0: 34050005 ori r5,r0,0x0005         |r5 = size of data to nullify
00180fc4: 8fbf0020 lw r31,0x0020(r29)
00180fc8: 8fb3001c lw r19,0x001c(r29)
00180fcc: 8fb20018 lw r18,0x0018(r29)
00180fd0: 8fb10014 lw r17,0x0014(r29)
00180fd4: 8fb00010 lw r16,0x0010(r29)
00180fd8: 27bd0028 addiu r29,r29,0x0028
00180fdc: 03e00008 jr r31
00180fe0: 00000000 nop

Return location

Battle.bin
0018c290: Attack_Finalisation_&_Reaction_Flagging