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

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(2 intermediate revisions by one other 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 22:06, 22 December 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