Difference between revisions of "Inflicted status CT setting, xfer last used CT"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with "<font face='Courier New'> 0018e248: 27bdffe0 addiu r29,r29,0xffe0 0018e24c: afb20018 sw r18,0x0018(r29) 0018e250: 00809021 addu r18,r4,r0 0018e254: 001210c0 sll r2,r18,0...")
 
m (Notes - return link - color - summary)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
Need r4 = Unit/Target ID
   
+
  -------------------------------------
 
  0018e248: 27bdffe0 addiu r29,r29,0xffe0
 
  0018e248: 27bdffe0 addiu r29,r29,0xffe0
 
  0018e24c: afb20018 sw r18,0x0018(r29)
 
  0018e24c: afb20018 sw r18,0x0018(r29)
  0018e250: 00809021 addu r18,r4,r0
+
  0018e250: 00809021 addu r18,r4,r0               |r18 = r4 (target ID)
  0018e254: 001210c0 sll r2,r18,0x03
+
  0018e254: 001210c0 sll r2,r18,0x03               |r2 = Target ID * 8
  0018e258: 00521023 subu r2,r2,r18
+
  0018e258: 00521023 subu r2,r2,r18               |r2 = Target ID *7
  0018e25c: 00021180 sll r2,r2,0x06
+
  0018e25c: 00021180 sll r2,r2,0x06               |r2 = Target ID * 448 ( = 0x01c0 size of unit data)
  0018e260: 3c038019 lui r3,0x8019
+
  0018e260: 3c038019 lui r3,0x8019  
  0018e264: 246308cc addiu r3,r3,0x08cc
+
  0018e264: 246308cc addiu r3,r3,0x08cc           |r3 = unit1 data pointer
 
  0018e268: afb10014 sw r17,0x0014(r29)
 
  0018e268: afb10014 sw r17,0x0014(r29)
  0018e26c: 00438821 addu r17,r2,r3
+
  0018e26c: 00438821 addu r17,r2,r3               |r17 = Target data pointer
 
  0018e270: afb00010 sw r16,0x0010(r29)
 
  0018e270: afb00010 sw r16,0x0010(r29)
  0018e274: 00008021 addu r16,r0,r0
+
  0018e274: 00008021 addu r16,r0,r0               |r16 = 0x00 Loop counter (step 1)
  0018e278: afbf001c sw r31,0x001c(r29)
+
  0018e278: afbf001c sw r31,0x001c(r29)  
  0018e27c: 06010002 bgez r16,0x0018e288
+
  0018e27c: 06010002 bgez r16,0x0018e288           |'''@  # If r16 < 0x00 (never ?)'''  - 40 Cycles
  0018e280: 02001021 addu r2,r16,r0
+
  0018e280: 02001021 addu r2,r16,r0                   |r2 = Loop counter
  0018e284: 26020007 addiu r2,r16,0x0007
+
  0018e284: 26020007 addiu r2,r16,0x0007                  |r2 = r16 + 0x0007
  0018e288: 000210c3 sra r2,r2,0x03
+
  0018e288: 000210c3 sra r2,r2,0x03                   |r2 = Counter/8 - Status set offset (0x00 to 0x04 while looping)
  0018e28c: 32040007 andi r4,r16,0x0007
+
  0018e28c: 32040007 andi r4,r16,0x0007               |r4 = 0x00 to 0x07 while looping
  0018e290: 34030080 ori r3,r0,0x0080
+
  0018e290: 34030080 ori r3,r0,0x0080                 |r3 = 0x80
  0018e294: 02223821 addu r7,r17,r2
+
  0018e294: 02223821 addu r7,r17,r2                   |Target data pointer + status set offset
  0018e298: 90e201ac lbu r2,0x01ac(r7) load attacks status removal
+
  0018e298: 90e201ac lbu r2,0x01ac(r7)                 |<span style="color:limegreen">r2 = target current action (TCA) Status Removal byte (1 to 5 while looping)</span>
  0018e29c: 00831807 srav r3,r3,r4
+
  0018e29c: 00831807 srav r3,r3,r4                     |r3 = 0x80 to 0x01 while looping (allow to scan each statuses from one set)
  0018e2a0: 00431024 and r2,r2,r3
+
  0018e2a0: 00431024 and r2,r2,r3                     |r2 <> 0 if checked status is going to be removed
  0018e2a4: 1040000d beq r2,r0,0x0018e2dc branch if no status removed?
+
  0018e2a4: 1040000d beq r2,r0,0x0018e2dc             |'''#If Checked status is in TCA status removal byte / Else branch to next loop'''
  0018e2a8: 02202021 addu r4,r17,r0
+
  0018e2a8: 02202021 addu r4,r17,r0                       |r4 = Target data pointer
  0018e2ac: 02002821 addu r5,r16,r0
+
  0018e2ac: 02002821 addu r5,r16,r0                       |r5 = Loop counter
  0018e2b0: 34060001 ori r6,r0,0x0001
+
  0018e2b0: 34060001 ori r6,r0,0x0001                     |r6 = 0x01
  0018e2b4: 90e201bb lbu r2,0x01bb(r7) load inflicted status list
+
  0018e2b4: 90e201bb lbu r2,0x01bb(r7)                     |<span style="color:limegreen">r2 = TCA inflicted status list (matching checked status)</span>
  0018e2b8: 00031827 nor r3,r0,r3
+
  0018e2b8: 00031827 nor r3,r0,r3                         |r3 = 0x7F to 0xFE (all bytes but the status checked)
  0018e2bc: 00431024 and r2,r2,r3
+
  0018e2bc: 00431024 and r2,r2,r3                         |r2 = update r2 without checked status (removed)
  0018e2c0: 0c0176dc jal 0x0005db70 Status CT setting
+
  0018e2c0: 0c0176dc jal 0x0005db70                       |-->[[Status_CT_Setting|<span style="color:blue">Status_CT_setting</span>]] return r2 = 0x00
  0018e2c4: a0e201bb sb r2,0x01bb(r7) store inflicted status
+
  0018e2c4: a0e201bb sb r2,0x01bb(r7)                     |<span style="color:darkviolet">update TCA Inflicted Status list without checked status</span>
  0018e2c8: 14400004 bne r2,r0,0x0018e2dc
+
  0018e2c8: 14400004 bne r2,r0,0x0018e2dc                 |'''#If r2 = 0x00 / Elsebranch to next loop'''
  0018e2cc: 26040001 addiu r4,r16,0x0001
+
  0018e2cc: 26040001 addiu r4,r16,0x0001                       |r4 = counter + 1
  0018e2d0: 00002821 addu r5,r0,r0
+
  0018e2d0: 00002821 addu r5,r0,r0                             |r5 = 0
  0018e2d4: 0c063a6f jal 0x0018e9bc Determine if status flags can be enabled
+
  0018e2d4: 0c063a6f jal 0x0018e9bc                           |-->[[Determine_if_Status_Flags_can_be_Enabled|<span style="color:blue"> Determine_if_Status_Flags_can_be_Enabled</span>]]
  0018e2d8: 02403021 addu r6,r18,r0
+
  0018e2d8: 02403021 addu r6,r18,r0                           |r6 = Target ID
  0018e2dc: 26100001 addiu r16,r16,0x0001
+
  0018e2dc: 26100001 addiu r16,r16,0x0001             |r16 = r16 + 1
  0018e2e0: 2a020028 slti r2,r16,0x0028
+
  0018e2e0: 2a020028 slti r2,r16,0x0028               |r2 = 0x01 while r16 < 0x28
  0018e2e4: 1440ffe5 bne r2,r0,0x0018e27c
+
  0018e2e4: 1440ffe5 bne r2,r0,0x0018e27c         |'''> Loop 40 times (Check all Status Removal)'''
  0018e2e8: 00000000 nop
+
  0018e2e8: 00000000
  0018e2ec: 0c0179d1 jal 0x0005e744 transfer last ability used CT
+
  0018e2ec: 0c0179d1 jal 0x0005e744               |-->[[Store_Current_Statuses|<span style="color:blue">Store_Current_Statuses </span>]] Combine Target innate statuses and Unit 0x01bb and store them in target current status
  0018e2f0: 02202021 addu r4,r17,r0
+
  0018e2f0: 02202021 addu r4,r17,r0               |r4 = target data pointer
 
  0018e2f4: 8fbf001c lw r31,0x001c(r29)
 
  0018e2f4: 8fbf001c lw r31,0x001c(r29)
 
  0018e2f8: 8fb20018 lw r18,0x0018(r29)
 
  0018e2f8: 8fb20018 lw r18,0x0018(r29)
Line 50: Line 50:
 
  0018e304: 27bd0020 addiu r29,r29,0x0020
 
  0018e304: 27bd0020 addiu r29,r29,0x0020
 
  0018e308: 03e00008 jr r31
 
  0018e308: 03e00008 jr r31
  0018e30c: 00000000 nop
+
  0018e30c: 00000000
</font>
+
 
 +
 
 +
==Return location==
 +
0018e114: [[Post_Ability_Hardcoding%3F]]
 +
0018e444: [[Store_status,modified_ENTD_for_current_attack]]
 +
 
 +
==Summary==
 +
r4 = Unit ID
 +
Loop checking all statuses one by one
 +
    If status X is in Unit current unit action status removal byte ( Unit data 0x01ac to 0x01b0)
 +
        Update Unit Status inflicted list 0x01bb to 0x01bf removing status X
 +
        [[Status_CT_Setting]] Nullify CT of status X (if necessary)
 +
        [[Determine_if_Status_Flags_can_be_Enabled]] Update Unit misc data status to add/remove (Unit X misc data 0x148 0x14C 0x150 0x154 )
 +
[[Store_Current_Statuses]] Combine Target innate statuses and Unit 0x01bb (to 0x01bf) and store them in target current status

Latest revision as of 19:58, 23 June 2021

Need r4 = Unit/Target ID
-------------------------------------
0018e248: 27bdffe0 addiu r29,r29,0xffe0
0018e24c: afb20018 sw r18,0x0018(r29)
0018e250: 00809021 addu r18,r4,r0                |r18 = r4 (target ID)
0018e254: 001210c0 sll r2,r18,0x03               |r2 = Target ID * 8
0018e258: 00521023 subu r2,r2,r18                |r2 = Target ID *7
0018e25c: 00021180 sll r2,r2,0x06                |r2 = Target ID * 448 ( = 0x01c0 size of unit data)
0018e260: 3c038019 lui r3,0x8019 
0018e264: 246308cc addiu r3,r3,0x08cc            |r3 = unit1 data pointer
0018e268: afb10014 sw r17,0x0014(r29)
0018e26c: 00438821 addu r17,r2,r3                |r17 = Target data pointer
0018e270: afb00010 sw r16,0x0010(r29)
0018e274: 00008021 addu r16,r0,r0                |r16 = 0x00 Loop counter (step 1)
0018e278: afbf001c sw r31,0x001c(r29) 
0018e27c: 06010002 bgez r16,0x0018e288           |@  # If r16 < 0x00 (never ?)  - 40 Cycles
0018e280: 02001021 addu r2,r16,r0                    |r2 = Loop counter
0018e284: 26020007 addiu r2,r16,0x0007                   |r2 = r16 + 0x0007
0018e288: 000210c3 sra r2,r2,0x03                    |r2 = Counter/8 - Status set offset (0x00 to 0x04 while looping)
0018e28c: 32040007 andi r4,r16,0x0007                |r4 = 0x00 to 0x07 while looping
0018e290: 34030080 ori r3,r0,0x0080                  |r3 = 0x80
0018e294: 02223821 addu r7,r17,r2                    |Target data pointer + status set offset
0018e298: 90e201ac lbu r2,0x01ac(r7)                 |r2 = target current action (TCA) Status Removal byte (1 to 5 while looping)
0018e29c: 00831807 srav r3,r3,r4                     |r3 = 0x80 to 0x01 while looping (allow to scan each statuses from one set)
0018e2a0: 00431024 and r2,r2,r3                      |r2 <> 0 if checked status is going to be removed
0018e2a4: 1040000d beq r2,r0,0x0018e2dc              |#If Checked status is in TCA status removal byte / Else branch to next loop
0018e2a8: 02202021 addu r4,r17,r0                        |r4 = Target data pointer
0018e2ac: 02002821 addu r5,r16,r0                        |r5 = Loop counter
0018e2b0: 34060001 ori r6,r0,0x0001                      |r6 = 0x01
0018e2b4: 90e201bb lbu r2,0x01bb(r7)                     |r2 = TCA inflicted status list (matching checked status)
0018e2b8: 00031827 nor r3,r0,r3                          |r3 = 0x7F to 0xFE (all bytes but the status checked)
0018e2bc: 00431024 and r2,r2,r3                          |r2 = update r2 without checked status (removed)
0018e2c0: 0c0176dc jal 0x0005db70                        |-->Status_CT_setting return r2 = 0x00 
0018e2c4: a0e201bb sb r2,0x01bb(r7)                      |update TCA Inflicted Status list without checked status
0018e2c8: 14400004 bne r2,r0,0x0018e2dc                  |#If r2 = 0x00 / Elsebranch to next loop
0018e2cc: 26040001 addiu r4,r16,0x0001                       |r4 = counter + 1
0018e2d0: 00002821 addu r5,r0,r0                             |r5 = 0
0018e2d4: 0c063a6f jal 0x0018e9bc                            |--> Determine_if_Status_Flags_can_be_Enabled
0018e2d8: 02403021 addu r6,r18,r0                            |r6 = Target ID
0018e2dc: 26100001 addiu r16,r16,0x0001              |r16 = r16 + 1
0018e2e0: 2a020028 slti r2,r16,0x0028                |r2 = 0x01 while r16 < 0x28 
0018e2e4: 1440ffe5 bne r2,r0,0x0018e27c          |> Loop 40 times (Check all Status Removal)
0018e2e8: 00000000
0018e2ec: 0c0179d1 jal 0x0005e744                |-->Store_Current_Statuses  Combine Target innate statuses and Unit 0x01bb and store them in target current status
0018e2f0: 02202021 addu r4,r17,r0                |r4 = target data pointer
0018e2f4: 8fbf001c lw r31,0x001c(r29)
0018e2f8: 8fb20018 lw r18,0x0018(r29)
0018e2fc: 8fb10014 lw r17,0x0014(r29)
0018e300: 8fb00010 lw r16,0x0010(r29)
0018e304: 27bd0020 addiu r29,r29,0x0020
0018e308: 03e00008 jr r31
0018e30c: 00000000


Return location

0018e114: Post_Ability_Hardcoding?
0018e444: Store_status,modified_ENTD_for_current_attack

Summary

r4 = Unit ID
Loop checking all statuses one by one
    If status X is in Unit current unit action status removal byte ( Unit data 0x01ac to 0x01b0)
       Update Unit Status inflicted list 0x01bb to 0x01bf removing status X
       Status_CT_Setting Nullify CT of status X (if necessary)
       Determine_if_Status_Flags_can_be_Enabled Update Unit misc data status to add/remove (Unit X misc data 0x148 0x14C 0x150 0x154 )
Store_Current_Statuses Combine Target innate statuses and Unit 0x01bb (to 0x01bf) and store them in target current status