Difference between revisions of "Status CT decrement and innate statuses?"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
BATTLE.BIN - Status CT decrement and innate statuses?
   
+
--------------------------------------------------------------------------------------------------
  0018d910: 27bdffe8 addiu r29,r29,0xffe8
+
Parameters : r4 as Unit ID
  0018d914: afbf0010 sw r31,0x0010(r29)
+
  --------------------------------------------------------------------------------------------------
  0018d918: 000410c0 sll r2,r4,0x03
+
  0018d910: 27bdffe8 addiu r29,r29,-0x0018    |
  0018d91c: 00441023 subu r2,r2,r4
+
  0018d914: afbf0010 sw r31,0x0010(r29)       |
  0018d920: 00021180 sll r2,r2,0x06
+
  0018d918: 000410c0 sll r2,r4,0x03           |
  0018d924: 3c048019 lui r4,0x8019
+
  0018d91c: 00441023 subu r2,r2,r4           |
  0018d928: 248408cc addiu r4,r4,0x08cc
+
  0018d920: 00021180 sll r2,r2,0x06           |
  0018d92c: 0c063681 jal 0x0018da04 [[Target pointers]]
+
  0018d924: 3c048019 lui r4,0x8019           |
  0018d930: 00442021 addu r4,r2,r4
+
  0018d928: 248408cc addiu r4,r4,0x08cc       |
  0018d934: 00002021 addu r4,r0,r0
+
  0018d92c: 0c063681 jal 0x0018da04           |{{f/jal|Target pointers|Target pointers}} {{f/std|Set 80192d90 and 80192d98}}
  0018d938: 34090080 ori r9,r0,0x0080
+
  0018d930: 00442021 addu r4,r2,r4           |{{f/adr|Unit ID Pointer}}
  0018d93c: 04810002 bgez r4,0x0018d948                     **Beginning of loop**
+
  0018d934: 00002021 addu r4,r0,r0           |{{f/std|Reset counter}}
  0018d940: 00801021 addu r2,r4,r0
+
  0018d938: 34090080 ori r9,r0,0x0080         |{{f/std|Used as bitmask}}
  0018d944: 24820007 addiu r2,r4,0x0007
+
                                            {{f/bloop|LOOP through status with CT (set 4 and 5)}}
  0018d948: 000210c3 sra r2,r2,0x03
+
  0018d93c: 04810002 bgez r4,0x0018d948           {{f/Cond|If Counter is invalid}}
  0018d94c: 24480003 addiu r8,r2,0x0003
+
  0018d940: 00801021 addu r2,r4,r0                   |
  0018d950: 3c078019 lui r7,0x8019
+
  0018d944: 24820007 addiu r2,r4,0x0007               |{{f/std|<nowiki>counter = 7</nowiki>}}
  0018d954: 8ce72d98 lw r7,0x2d98(r7) target stats
+
  0018d948: 000210c3 sra r2,r2,0x03               |{{f/std|Counter/8 (status set)}}
  0018d958: 30830007 andi r3,r4,0x0007
+
  0018d94c: 24480003 addiu r8,r2,0x0003           |{{f/std|Minimal set is set 4 (status Above do not have any CT)}}
  0018d95c: 00e82821 addu r5,r7,r8
+
  0018d950: 3c078019 lui r7,0x8019               |
  0018d960: 90a201bb lbu r2,0x01bb(r5) load inflicted status list
+
  0018d954: 8ce72d98 lw r7,0x2d98(r7)             |{{f/adr|target stats}}
  0018d964: 00693007 srav r6,r9,r3
+
  0018d958: 30830007 andi r3,r4,0x0007           |{{f/std|Status rank in status set}}
  0018d968: 00461024 and r2,r2,r6
+
  0018d95c: 00e82821 addu r5,r7,r8               |{{f/std|Unit Pointer + Status Set offset}}
  0018d96c: 10400015 beq r2,r0,0x0018d9c4 branch if status not inflicted
+
  0018d960: 90a201bb lbu r2,0x01bb(r5)           |{{f/load|load inflicted status list}}
  0018d970: 00000000 nop
+
  0018d964: 00693007 srav r6,r9,r3               |
  0018d974: 90a2004e lbu r2,0x004e(r5) load innate statuses
+
  0018d968: 00461024 and r2,r2,r6                 |
  0018d978: 00000000 nop
+
  0018d96c: 10400015 beq r2,r0,0x0018d9c4         {{f/Cond|If This iteration status is inflicted}}
  0018d97c: 00461024 and r2,r2,r6
+
  0018d970: 00000000 nop                             |{{f/std|}}
  0018d980: 14400010 bne r2,r0,0x0018d9c4 branch if status is innate
+
  0018d974: 90a2004e lbu r2,0x004e(r5)               |{{f/load|load innate statuses}}
  0018d984: 00e41821 addu r3,r7,r4
+
  0018d978: 00000000 nop                             |
  0018d988: 9062005d lbu r2,0x005d(r3) load poison CT
+
  0018d97c: 00461024 and r2,r2,r6                     |
  0018d98c: 00000000 nop
+
  0018d980: 14400010 bne r2,r0,0x0018d9c4             {{f/Cond|If This status is not innat (cancelable)}}
  0018d990: 2442ffff addiu r2,r2,0xffff
+
  0018d984: 00e41821 addu r3,r7,r4                       |{{f/std|Unit pointer + status offset}}
  0018d994: a062005d sb r2,0x005d(r3) decrement CT and store
+
  0018d988: 9062005d lbu r2,0x005d(r3)                   |{{f/load|load poison CT}}
  0018d998: 304200ff andi r2,r2,0x00ff
+
  0018d98c: 00000000 nop                                 |
  0018d99c: 14400009 bne r2,r0,0x0018d9c4 branch if CT is not 0
+
  0018d990: 2442ffff addiu r2,r2,-0x0001                  |
  0018d9a0: 00000000 nop
+
  0018d994: a062005d sb r2,0x005d(r3)                     |{{f/store|decrement CT and store}}
  0018d9a4: 3c038019 lui r3,0x8019
+
  0018d998: 304200ff andi r2,r2,0x00ff                   |
  0018d9a8: 8c632d90 lw r3,0x2d90(r3)
+
  0018d99c: 14400009 bne r2,r0,0x0018d9c4                 {{f/Cond|If New CT is 0}}
  0018d9ac: 00000000 nop
+
  0018d9a0: 00000000 nop                                     |{{f/std|}}
  0018d9b0: 00681821 addu r3,r3,r8
+
  0018d9a4: 3c038019 lui r3,0x8019                           |{{f/std|Unit action pointer}}
  0018d9b4: 90620020 lbu r2,0x0020(r3) load attack status removal
+
  0018d9a8: 8c632d90 lw r3,0x2d90(r3)                         |
  0018d9b8: 00000000 nop
+
  0018d9ac: 00000000 nop                                     |
  0018d9bc: 00c21025 or r2,r6,r2
+
  0018d9b0: 00681821 addu r3,r3,r8                           |{{f/std|Action pointer + this iteration set offset}}
  0018d9c0: a0620020 sb r2,0x0020(r3)
+
  0018d9b4: 90620020 lbu r2,0x0020(r3)                       |{{f/load|load attack status removal}}
  0018d9c4: 24840001 addiu r4,r4,0x0001
+
  0018d9b8: 00000000 nop                                     |
  0018d9c8: 2882000f slti r2,r4,0x000f
+
  0018d9bc: 00c21025 or r2,r6,r2                             |
  0018d9cc: 1440ffdb bne r2,r0,0x0018d93c                       Continue loop if all statuses are not checked
+
  0018d9c0: a0620020 sb r2,0x0020(r3)                         |{{f/store|Store Cancel status with CT at 0}}
  0018d9d0: 00000000 nop
+
  0018d9c4: 24840001 addiu r4,r4,0x0001           |{{f/std|Counter +1}}
  0018d9d4: 0c0612c9 jal 0x00184b24 [[Validate Status Changes]]
+
  0018d9c8: 2882000f slti r2,r4,0x000f           |{{f/std|Check limit}}
  0018d9d8: 00002021 addu r4,r0,r0
+
  0018d9cc: 1440ffdb bne r2,r0,0x0018d93c     {{f/eloop|loop 16 times}}
  0018d9dc: 10400005 beq r2,r0,0x0018d9f4                       Branch if invalid
+
  0018d9d0: 00000000 nop                         |
  0018d9e0: 34020008 ori r2,r0,0x0008
+
  0018d9d4: 0c0612c9 jal 0x00184b24           |{{f/jal|Validate Status Changes|Validate Status Changes}}
  0018d9e4: 3c038019 lui r3,0x8019
+
  0018d9d8: 00002021 addu r4,r0,r0           |
  0018d9e8: 8c632d90 lw r3,0x2d90(r3)                           Target current action pointer
+
  0018d9dc: 10400005 beq r2,r0,0x0018d9f4     {{f/Cond|If There is something to cancel}}
  0018d9ec: 00000000 nop
+
  0018d9e0: 34020008 ori r2,r0,0x0008             |
  0018d9f0: a0620025 sb r2,0x0025(r3) store attack type = 0x08 status change
+
  0018d9e4: 3c038019 lui r3,0x8019               |
  0018d9f4: 8fbf0010 lw r31,0x0010(r29)
+
  0018d9e8: 8c632d90 lw r3,0x2d90(r3)             |{{f/adr|Target current action pointer}}
 +
  0018d9ec: 00000000 nop                         |
 +
  0018d9f0: a0620025 sb r2,0x0025(r3)             |{{f/store|<nowiki>store attack type = 0x08 status change</nowiki>}}
 +
  0018d9f4: 8fbf0010 lw r31,0x0010(r29)       {{f/std|END}}
 
  0018d9f8: 27bd0018 addiu r29,r29,0x0018
 
  0018d9f8: 27bd0018 addiu r29,r29,0x0018
 
  0018d9fc: 03e00008 jr r31
 
  0018d9fc: 03e00008 jr r31
 
  0018da00: 00000000 nop
 
  0018da00: 00000000 nop
</font>
 

Latest revision as of 17:31, 1 January 2024

BATTLE.BIN - Status CT decrement and innate statuses?
--------------------------------------------------------------------------------------------------
Parameters : r4 as Unit ID
--------------------------------------------------------------------------------------------------
0018d910: 27bdffe8 addiu r29,r29,-0x0018    |
0018d914: afbf0010 sw r31,0x0010(r29)       |
0018d918: 000410c0 sll r2,r4,0x03           |
0018d91c: 00441023 subu r2,r2,r4            |
0018d920: 00021180 sll r2,r2,0x06           |
0018d924: 3c048019 lui r4,0x8019            |
0018d928: 248408cc addiu r4,r4,0x08cc       |
0018d92c: 0c063681 jal 0x0018da04           |-->Target pointers Set 80192d90 and 80192d98
0018d930: 00442021 addu r4,r2,r4            |Unit ID Pointer
0018d934: 00002021 addu r4,r0,r0            |Reset counter
0018d938: 34090080 ori r9,r0,0x0080         |Used as bitmask
                                            @LOOP through status with CT (set 4 and 5)
0018d93c: 04810002 bgez r4,0x0018d948           #If Counter is invalid
0018d940: 00801021 addu r2,r4,r0                    |
0018d944: 24820007 addiu r2,r4,0x0007               |counter = 7
0018d948: 000210c3 sra r2,r2,0x03               |Counter/8 (status set)
0018d94c: 24480003 addiu r8,r2,0x0003           |Minimal set is set 4 (status Above do not have any CT)
0018d950: 3c078019 lui r7,0x8019                |
0018d954: 8ce72d98 lw r7,0x2d98(r7)             |target stats
0018d958: 30830007 andi r3,r4,0x0007            |Status rank in status set
0018d95c: 00e82821 addu r5,r7,r8                |Unit Pointer + Status Set offset
0018d960: 90a201bb lbu r2,0x01bb(r5)            |load inflicted status list
0018d964: 00693007 srav r6,r9,r3                |
0018d968: 00461024 and r2,r2,r6                 |
0018d96c: 10400015 beq r2,r0,0x0018d9c4         #If This iteration status is inflicted
0018d970: 00000000 nop                              |
0018d974: 90a2004e lbu r2,0x004e(r5)                |load innate statuses
0018d978: 00000000 nop                              |
0018d97c: 00461024 and r2,r2,r6                     |
0018d980: 14400010 bne r2,r0,0x0018d9c4             #If This status is not innat (cancelable)
0018d984: 00e41821 addu r3,r7,r4                        |Unit pointer + status offset
0018d988: 9062005d lbu r2,0x005d(r3)                    |load poison CT
0018d98c: 00000000 nop                                  |
0018d990: 2442ffff addiu r2,r2,-0x0001                  |
0018d994: a062005d sb r2,0x005d(r3)                     |decrement CT and store
0018d998: 304200ff andi r2,r2,0x00ff                    |
0018d99c: 14400009 bne r2,r0,0x0018d9c4                 #If New CT is 0
0018d9a0: 00000000 nop                                      |
0018d9a4: 3c038019 lui r3,0x8019                            |Unit action pointer
0018d9a8: 8c632d90 lw r3,0x2d90(r3)                         |
0018d9ac: 00000000 nop                                      |
0018d9b0: 00681821 addu r3,r3,r8                            |Action pointer + this iteration set offset
0018d9b4: 90620020 lbu r2,0x0020(r3)                        |load attack status removal
0018d9b8: 00000000 nop                                      |
0018d9bc: 00c21025 or r2,r6,r2                              |
0018d9c0: a0620020 sb r2,0x0020(r3)                         |Store Cancel status with CT at 0
0018d9c4: 24840001 addiu r4,r4,0x0001           |Counter +1
0018d9c8: 2882000f slti r2,r4,0x000f            |Check limit
0018d9cc: 1440ffdb bne r2,r0,0x0018d93c     Λ loop 16 times
0018d9d0: 00000000 nop                          |
0018d9d4: 0c0612c9 jal 0x00184b24           |-->Validate Status Changes
0018d9d8: 00002021 addu r4,r0,r0            |
0018d9dc: 10400005 beq r2,r0,0x0018d9f4     #If There is something to cancel
0018d9e0: 34020008 ori r2,r0,0x0008             |
0018d9e4: 3c038019 lui r3,0x8019                |
0018d9e8: 8c632d90 lw r3,0x2d90(r3)             |Target current action pointer
0018d9ec: 00000000 nop                          |
0018d9f0: a0620025 sb r2,0x0025(r3)             |store attack type = 0x08 status change
0018d9f4: 8fbf0010 lw r31,0x0010(r29)       END
0018d9f8: 27bd0018 addiu r29,r29,0x0018
0018d9fc: 03e00008 jr r31
0018da00: 00000000 nop