Difference between revisions of "Status CT Setting"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m (Notes - return links - color attempt)
Line 1: Line 1:
  Status CT Setting
+
  Status CT Setting  
  0005db70: 34020002 ori r2,r0,0x0002 r2 = 2
+
- Set death counter, nullify CT of removed status, set death sentence CT
  0005db74: 14a2000d bne r5,r2,0x0005dbac Branch if Counter != 2 (Death)
+
-----------------------------------
  0005db78: 00803821 addu r7,r4,r0 r7 = Unit's Data Pointer
+
Need r4 = Target/Unit data pointer
  0005db7c: 90e20005 lbu r2,0x0005(r7) Load Unit's Battle Flags
+
      r5 = Loop Counter = Status number (see patcher list) 
  0005db80: 00000000 nop
+
      r6 = ? 0x01 when called from [[Inflicted_status_CT_setting,_xfer_last_used_CT|0018e2c0]] (removal section)
  0005db84: 30420004 andi r2,r2,0x0004
+
Return r2 = 0xffff (Death sentence already inflicted ) Else 0x00
  0005db88: 14400007 bne r2,r0,0x0005dba8 Branch if Unit is Immortal
+
----------------------------------
  0005db8c: 340200ff ori r2,r0,0x00ff r2 = ff
+
  0005db70: 34020002 ori r2,r0,0x0002         r2 = 0x0002
  0005db90: 90e20006 lbu r2,0x0006(r7) Load Unit's Gender Byte
+
  0005db74: 14a2000d bne r5,r2,0x0005dbac     <span style="color:firebrick">#If r5 = 0x02 (status = Death) </span>/Branch if Counter != 2 (Death)
  0005db94: 00000000 nop
+
  0005db78: 00803821 addu r7,r4,r0               |r7 = Unit Data Pointer
  0005db98: 30420009 andi r2,r2,0x0009
+
  0005db7c: 90e20005 lbu r2,0x0005(r7)           |r2 = <span style="color:limegreen">Unit ENTD flags</span>
  0005db9c: 14400002 bne r2,r0,0x0005dba8 Branch if Unit has Load/Save Formation
+
  0005db80: 00000000 nop                         |
  0005dba0: 340200ff ori r2,r0,0x00ff r2 = ff
+
  0005db84: 30420004 andi r2,r2,0x0004           |r2 = 0x04 if unit is immortal / else 0x00
  0005dba4: 34020003 ori r2,r0,0x0003 r2 = 3
+
  0005db88: 14400007 bne r2,r0,0x0005dba8         <span style="color:firebrick">#If Unit is not immortal </span>/ Else branch
  0005dba8: a0e20007 sb r2,0x0007(r7) Store Unit's Death Counter = 3 or  ff
+
  0005db8c: 340200ff ori r2,r0,0x00ff             |r2 = 0xff
  0005dbac: 24a4ffe8 addiu r4,r5,0xffe8 r4 = Counter - 0x18
+
  0005db90: 90e20006 lbu r2,0x0006(r7)               |r2 = <span style="color:limegreen">Unit's Gender Byte</span>
  0005dbb0: 2c820010 sltiu r2,r4,0x0010
+
  0005db94: 00000000 nop                             |
  0005dbb4: 10400015 beq r2,r0,0x0005dc0c Branch if Counter != last 16 statuses (not a CT status)
+
  0005db98: 30420009 andi r2,r2,0x0009               |r2 <> 0x00 if Unit has Load/Save  Formation
  0005dbb8: 00001021 addu r2,r0,r0 r2 = 0
+
  0005db9c: 14400002 bne r2,r0,0x0005dba8             <span style="color:firebrick">#If unit do not have save/load formation </span>
  0005dbbc: 10c00005 beq r6,r0,0x0005dbd4 Branch if Not Initializing Data?
+
  0005dba0: 340200ff ori r2,r0,0x00ff                 |r2 = 0xff
  0005dbc0: 00804021 addu r8,r4,r0 r8 = Counter - 0x18
+
  0005dba4: 34020003 ori r2,r0,0x0003                     |r2 = 0x03
  0005dbc4: 00e81021 addu r2,r7,r8 r2 = Unit's Data Pointer + Counter - 0x18
+
  0005dba8: a0e20007 sb r2,0x0007(r7)             |Store r2 as  <span style="color:darkviolet">Unit's Death Counter (0x03 or  0xff)</span>
  0005dbc8: a040005d sb r0,0x005d(r2) Store X Status' CT = 0
+
  0005dbac: 24a4ffe8 addiu r4,r5,0xffe8       r4 = Counter - 0x18
  0005dbcc: 08017703 j 0x0005dc0c
+
  0005dbb0: 2c820010 sltiu r2,r4,0x0010       r2 = 0x01 if r4 < 0x10
  0005dbd0: 00001021 addu r2,r0,r0 r2 = 0
+
  0005dbb4: 10400015 beq r2,r0,0x0005dc0c     <span style="color:firebrick">#if r2 = 0x01 (16 last statuses - they have a CT) </span>/ Else <span style="color:crimson">branch to end</span>
  0005dbd4: 3402000f ori r2,r0,0x000f r2 = f
+
  0005dbb8: 00001021 addu r2,r0,r0           |r2 = 0x00
  0005dbd8: 15020006 bne r8,r2,0x0005dbf4 Branch if Status Checked isn't Death Sentence
+
  0005dbbc: 10c00005 beq r6,r0,0x0005dbd4       <span style="color:firebrick">#If r6 <> 0x00 (remove status ?) </span>/ Branch if Not (Initializing Data?)
  0005dbdc: 00001021 addu r2,r0,r0 r2 = 0
+
  0005dbc0: 00804021 addu r8,r4,r0                   |r8 = Counter - 0x18
  0005dbe0: 90e2006c lbu r2,0x006c(r7) Load Unit's Death Sentence CT
+
  0005dbc4: 00e81021 addu r2,r7,r8                   |r2 = Unit's Data Pointer + Counter - 0x18
  0005dbe4: 00000000 nop
+
  0005dbc8: a040005d sb r0,0x005d(r2)                 |<span style="color:darkviolet">Store Status X CT = 0</span>
  0005dbe8: 14400008 bne r2,r0,0x0005dc0c Branch if DS CT != 0 (Check if already inflicted)
+
  0005dbcc: 08017703 j 0x0005dc0c                     <span style="color:crimson">>> Jump to end</span>
  0005dbec: 2402ffff addiu r2,r0,0xffff r2 = ffffffff
+
  0005dbd0: 00001021 addu r2,r0,r0                   |r2 = 0x00
  0005dbf0: 00001021 addu r2,r0,r0 r2 = 0
+
  0005dbd4: 3402000f ori r2,r0,0x000f           |r2 = 0x0f
  0005dbf4: 00051900 sll r3,r5,0x04 r3 = Counter * 16
+
  0005dbd8: 15020006 bne r8,r2,0x0005dbf4       <span style="color:firebrick">#If Status is death sentence </span>// Branch if Status Checked isn't Death Sentence
  0005dbf8: 3c018006 lui r1,0x8006
+
  0005dbdc: 00001021 addu r2,r0,r0               |r2 = 0x00
  0005dbfc: 00230821 addu r1,r1,r3
+
  0005dbe0: 90e2006c lbu r2,0x006c(r7)               |r2 = <span style="color:limegreen">Unit's Death Sentence CT</span>
  0005dc00: 90245de7 lbu r4,0x5de7(r1) Load Status's CT
+
  0005dbe4: 00000000 nop                             |
  0005dc04: 00e81821 addu r3,r7,r8 r3 = Unit's Data Pointer + Counter - 0x18
+
  0005dbe8: 14400008 bne r2,r0,0x0005dc0c             <span style="color:firebrick">#If r2 = 0x00 </span>/ Else <span style="color:crimson">Branch to end</span> (with r2 = 0xffff)
  0005dc08: a064005d sb r4,0x005d(r3) Store Unit's Status's CT
+
  0005dbec: 2402ffff addiu r2,r0,0xffff               |r2 = 0xffff (death sentence is already inflicted)
 +
  0005dbf0: 00001021 addu r2,r0,r0                       |r2 = 0 (inflicting DS)
 +
  0005dbf4: 00051900 sll r3,r5,0x04             |r3 = Counter * 16
 +
  0005dbf8: 3c018006 lui r1,0x8006               |
 +
  0005dbfc: 00230821 addu r1,r1,r3               |r1 = 8006XXXX (XXXX = status number)
 +
  0005dc00: 90245de7 lbu r4,0x5de7(r1)           |r4 = <span style="color:limegreen">status X CT Load Status's CT</span>
 +
  0005dc04: 00e81821 addu r3,r7,r8               |r3 = Unit's Data Pointer + Counter - 0x18
 +
  0005dc08: a064005d sb r4,0x005d(r3)           |<span style="color:darkviolet">Store Unit's Status X's CT</span>
 
  0005dc0c: 03e00008 jr r31
 
  0005dc0c: 03e00008 jr r31
 
  0005dc10: 00000000 nop
 
  0005dc10: 00000000 nop
Line 47: Line 54:
 
  0005d588: [[Float/Current Statuses/Status Immunities/Status CT]]
 
  0005d588: [[Float/Current Statuses/Status Immunities/Status CT]]
 
  0005d82c: [[Status Setting/Checking + Equip/R/S/M Stats]]
 
  0005d82c: [[Status Setting/Checking + Equip/R/S/M Stats]]
  0018e2c0:0018e248
+
  0018e2c8: [[Inflicted_status_CT_setting,_xfer_last_used_CT]]
 
  0018e46c:0018e310
 
  0018e46c:0018e310
 
  0018ece0:0018ec44
 
  0018ece0:0018ec44

Revision as of 20:54, 14 June 2021

Status CT Setting 
- Set death counter, nullify CT of removed status, set death sentence CT
-----------------------------------
Need r4 = Target/Unit data pointer
     r5 = Loop Counter = Status number (see patcher list)  
     r6 = ? 0x01 when called from 0018e2c0 (removal section)
Return r2 = 0xffff (Death sentence already inflicted ) Else 0x00
----------------------------------
0005db70: 34020002 ori r2,r0,0x0002          r2 = 0x0002
0005db74: 14a2000d bne r5,r2,0x0005dbac      #If r5 = 0x02 (status = Death) /Branch if Counter != 2 (Death)
0005db78: 00803821 addu r7,r4,r0                |r7 = Unit Data Pointer
0005db7c: 90e20005 lbu r2,0x0005(r7)            |r2 = Unit ENTD flags
0005db80: 00000000 nop                          |
0005db84: 30420004 andi r2,r2,0x0004            |r2 = 0x04 if unit is immortal / else 0x00
0005db88: 14400007 bne r2,r0,0x0005dba8         #If Unit is not immortal / Else branch
0005db8c: 340200ff ori r2,r0,0x00ff             |r2 = 0xff
0005db90: 90e20006 lbu r2,0x0006(r7)                |r2 = Unit's Gender Byte
0005db94: 00000000 nop                              |
0005db98: 30420009 andi r2,r2,0x0009                |r2 <> 0x00 if Unit has Load/Save  Formation
0005db9c: 14400002 bne r2,r0,0x0005dba8             #If unit do not have save/load formation  
0005dba0: 340200ff ori r2,r0,0x00ff                 |r2 = 0xff
0005dba4: 34020003 ori r2,r0,0x0003                     |r2 = 0x03
0005dba8: a0e20007 sb r2,0x0007(r7)             |Store r2 as  Unit's Death Counter (0x03 or  0xff)
0005dbac: 24a4ffe8 addiu r4,r5,0xffe8       r4 = Counter - 0x18
0005dbb0: 2c820010 sltiu r2,r4,0x0010       r2 = 0x01 if r4 < 0x10
0005dbb4: 10400015 beq r2,r0,0x0005dc0c     #if r2 = 0x01 (16 last statuses - they have a CT) / Else branch to end
0005dbb8: 00001021 addu r2,r0,r0            |r2 = 0x00
0005dbbc: 10c00005 beq r6,r0,0x0005dbd4        #If r6 <> 0x00 (remove status ?) / Branch if Not (Initializing Data?)
0005dbc0: 00804021 addu r8,r4,r0                    |r8 = Counter - 0x18
0005dbc4: 00e81021 addu r2,r7,r8                    |r2 = Unit's Data Pointer + Counter - 0x18
0005dbc8: a040005d sb r0,0x005d(r2)                 |Store Status X CT = 0
0005dbcc: 08017703 j 0x0005dc0c                     >> Jump to end
0005dbd0: 00001021 addu r2,r0,r0                    |r2 = 0x00
0005dbd4: 3402000f ori r2,r0,0x000f            |r2 = 0x0f
0005dbd8: 15020006 bne r8,r2,0x0005dbf4        #If Status is death sentence // Branch if Status Checked isn't Death Sentence
0005dbdc: 00001021 addu r2,r0,r0               |r2 = 0x00
0005dbe0: 90e2006c lbu r2,0x006c(r7)                |r2 = Unit's Death Sentence CT
0005dbe4: 00000000 nop                              |
0005dbe8: 14400008 bne r2,r0,0x0005dc0c             #If r2 = 0x00 / Else Branch to end (with r2 = 0xffff)
0005dbec: 2402ffff addiu r2,r0,0xffff               |r2 = 0xffff (death sentence is already inflicted)
0005dbf0: 00001021 addu r2,r0,r0                        |r2 = 0 (inflicting DS)
0005dbf4: 00051900 sll r3,r5,0x04              |r3 = Counter * 16
0005dbf8: 3c018006 lui r1,0x8006               |
0005dbfc: 00230821 addu r1,r1,r3               |r1 = 8006XXXX (XXXX = status number)
0005dc00: 90245de7 lbu r4,0x5de7(r1)           |r4 = status X CT Load Status's CT
0005dc04: 00e81821 addu r3,r7,r8               |r3 = Unit's Data Pointer + Counter - 0x18
0005dc08: a064005d sb r4,0x005d(r3)            |Store Unit's Status X's  CT
0005dc0c: 03e00008 jr r31
0005dc10: 00000000 nop


Return Locations

0005d588: Float/Current Statuses/Status Immunities/Status CT
0005d82c: Status Setting/Checking + Equip/R/S/M Stats
0018e2c8: Inflicted_status_CT_setting,_xfer_last_used_CT 
0018e46c:0018e310
0018ece0:0018ec44