Difference between revisions of "Target's Status Affecting XA (Magical)"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
  Target's Status Affecting XA (Magical)
+
  No Parameters - Returns Nothing
  00186460: 3c028019 lui r2,0x8019
+
  00186464: 8c422d98 lw r2,0x2d98(r2) Load Defender's Stats
+
Decreases Ability XA (-33%) if Target has Shell
  00186468: 00000000 nop
+
Increases Ability XA (+50%) if Target has Frog or Chicken
  0018646c: 9042005b lbu r2,0x005b(r2) Load the Defender's 4th set of Status
+
---------------------------------------------------------------------------------
  00186470: 00000000 nop
+
  00186460: 3c028019 lui r2,0x8019           |
  00186474: 30420010 andi r2,r2,0x0010
+
  00186464: 8c422d98 lw r2,0x2d98(r2)         |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  00186478: 1040000b beq r2,r0,0x001864a8 Branch if the Target doesn't have  Shell
+
  00186468: 00000000 nop                     |
  0018647c: 3c025555 lui r2,0x5555
+
  0018646c: 9042005b lbu r2,0x005b(r2)       |{{f/load|<nowiki>r2 = Target 4th set of Current statuses</nowiki>}}
  00186480: 3c048019 lui r4,0x8019
+
  00186470: 00000000 nop                     |
  00186484: 248438ce addiu r4,r4,0x38ce
+
  00186474: 30420010 andi r2,r2,0x0010       |{{f/std|<nowiki>r2 = 0x10 if Target has Shell</nowiki>}}
  00186488: 84830000 lh r3,0x0000(r4) Load xA
+
  00186478: 1040000b beq r2,r0,0x001864a8     {{f/Cond|If Target has Shell}}
  0018648c: 34425556 ori r2,r2,0x5556 R2 = 55555556
+
  0018647c: 3c025555 lui r2,0x5555               |
  00186490: 00031840 sll r3,r3,0x01 XA * 2
+
  00186480: 3c048019 lui r4,0x8019               |
  00186494: 00620018 mult r3,r2 XA * 2 / 3
+
  00186484: 248438ce addiu r4,r4,0x38ce           |{{f/adr|<nowiki>r4 = Current Ability XA pointer</nowiki>}}
  00186498: 00031fc3 sra r3,r3,0x1f
+
  00186488: 84830000 lh r3,0x0000(r4)             |{{f/load|<nowiki>r3 = Ability XA</nowiki>}}
  0018649c: 00001010 mfhi r2 Move "Remainder" to R2
+
  0018648c: 34425556 ori r2,r2,0x5556             |{{f/std|<nowiki>r2 = 0x55555556 (0,33 * 2^32)</nowiki>}}
  001864a0: 00431023 subu r2,r2,r3
+
  00186490: 00031840 sll r3,r3,0x01               |{{f/std|XA * 2}}
  001864a4: a4820000 sh r2,0x0000(r4) Store New XA
+
  00186494: 00620018 mult r3,r2                   |{{f/std|XA * 2 / 3 * 2^32}}
  001864a8: 3c028019 lui r2,0x8019
+
  00186498: 00031fc3 sra r3,r3,0x1f               |{{f/std|<nowiki>r3 = highest bit of r3 (should be 0x00 else 0x01)</nowiki>}}
  001864ac: 8c422d98 lw r2,0x2d98(r2) Load Defender's Status
+
  0018649c: 00001010 mfhi r2                     |{{f/std|<nowiki>r2 = XA *2/3</nowiki>}}
  001864b0: 00000000 nop
+
  001864a0: 00431023 subu r2,r2,r3               |{{f/std|XA eventually down rounded}}
  001864b4: 9042005a lbu r2,0x005a(r2) Load the Defender's 3rd set of Status
+
  001864a4: a4820000 sh r2,0x0000(r4)             |{{f/store|Store New XA (66% of initial XA)}}
  001864b8: 00000000 nop
+
  001864a8: 3c028019 lui r2,0x8019           |
  001864bc: 30420006 andi r2,r2,0x0006
+
  001864ac: 8c422d98 lw r2,0x2d98(r2)         |{{f/adr|<nowiki>r2 = Target data pointer</nowiki>}}
  001864c0: 1040000b beq r2,r0,0x001864f0 Branch if the Target doesn't have Frog or Chicken  
+
  001864b0: 00000000 nop                     |
  001864c4: 00000000 nop
+
  001864b4: 9042005a lbu r2,0x005a(r2)       |{{f/load|<nowiki>r2 = Target 4rd set of Current statuses</nowiki>}}
  001864c8: 3c048019 lui r4,0x8019
+
  001864b8: 00000000 nop                     |
  001864cc: 248438ce addiu r4,r4,0x38ce
+
  001864bc: 30420006 andi r2,r2,0x0006       |{{f/std|r2 <> 0x00 if Target has frog or chicken}}
  001864d0: 84830000 lh r3,0x0000(r4) Load XA
+
  001864c0: 1040000b beq r2,r0,0x001864f0     {{f/Cond|If the Target has Frog or Chicken }}
  001864d4: 00000000 nop
+
  001864c4: 00000000 nop                         |
  001864d8: 00031040 sll r2,r3,0x01 XA * 2
+
  001864c8: 3c048019 lui r4,0x8019               |
  001864dc: 00431021 addu r2,r2,r3 XA * 3
+
  001864cc: 248438ce addiu r4,r4,0x38ce           |{{f/adr|<nowiki>r4 = Current Ability XA pointer</nowiki>}}
  001864e0: 00021fc2 srl r3,r2,0x1f
+
  001864d0: 84830000 lh r3,0x0000(r4)             |{{f/load|<nowiki>r3 = Ability XA</nowiki>}}
  001864e4: 00431021 addu r2,r2,r3
+
  001864d4: 00000000 nop                         |
  001864e8: 00021043 sra r2,r2,0x01 XA * 3 / 2
+
  001864d8: 00031040 sll r2,r3,0x01               |{{f/std|XA * 2}}
  001864ec: a4820000 sh r2,0x0000(r4) Store new XA
+
  001864dc: 00431021 addu r2,r2,r3               |{{f/std|XA * 3}}
  001864f0: 03e00008 jr r31
+
  001864e0: 00021fc2 srl r3,r2,0x1f               |{{f/std|<nowiki>r3 = highest bit of r3 (should be 0x00 else 0x01)</nowiki>}}
 +
  001864e4: 00431021 addu r2,r2,r3               |{{f/std|XA eventually high rounded}}
 +
  001864e8: 00021043 sra r2,r2,0x01               |{{f/std|XA * 3 / 2}}
 +
  001864ec: a4820000 sh r2,0x0000(r4)             |{{f/store|Store new XA (150% of initial XA)}}
 +
  001864f0: 03e00008 jr r31                   END
 
  001864f4: 00000000 nop
 
  001864f4: 00000000 nop
 
+
 
+
'''Warning''' : this routine don't save r31 (and don't set his stack pointer) do not jal from here without resolving it   
== Return Locations ==
+
=== Return Locations ===
 
+
'''Battle.bin'''
*Battle.bin
+
  00188764: [[Magical Support/Status/Compat]]
  0018875c: [[Magical Support/Status/Compat]]
+
  00189018: [[0E_Dmg_(Y)%25_Hit_F(MA%2BX)%25_100%25_Status_Hide_Status|Formula 0E - Dmg (Y)% Hit F(MA+X)% 100% Status Hide Status]]
  00189010: [[0E Dmg_(Y)% Hit_F(MA+X)% 100% Status Hide Status]]
 

Revision as of 18:44, 11 April 2022

No Parameters - Returns Nothing

Decreases Ability XA (-33%) if Target has Shell
Increases Ability XA (+50%) if Target has Frog or Chicken
---------------------------------------------------------------------------------
00186460: 3c028019 lui r2,0x8019            |
00186464: 8c422d98 lw r2,0x2d98(r2)         |r2 = Target data pointer
00186468: 00000000 nop                      |
0018646c: 9042005b lbu r2,0x005b(r2)        |r2 = Target 4th set of Current statuses
00186470: 00000000 nop                      |
00186474: 30420010 andi r2,r2,0x0010        |r2 = 0x10 if Target has Shell
00186478: 1040000b beq r2,r0,0x001864a8     #If Target has Shell
0018647c: 3c025555 lui r2,0x5555                |
00186480: 3c048019 lui r4,0x8019                |
00186484: 248438ce addiu r4,r4,0x38ce           |r4 = Current Ability XA pointer
00186488: 84830000 lh r3,0x0000(r4)             |r3 = Ability XA
0018648c: 34425556 ori r2,r2,0x5556             |r2 = 0x55555556 (0,33 * 2^32)
00186490: 00031840 sll r3,r3,0x01               |XA * 2
00186494: 00620018 mult r3,r2                   |XA * 2 / 3 * 2^32
00186498: 00031fc3 sra r3,r3,0x1f               |r3 = highest bit of r3 (should be 0x00 else 0x01)
0018649c: 00001010 mfhi r2                      |r2 = XA *2/3
001864a0: 00431023 subu r2,r2,r3                |XA eventually down rounded
001864a4: a4820000 sh r2,0x0000(r4)             |Store New XA (66% of initial XA)
001864a8: 3c028019 lui r2,0x8019            |
001864ac: 8c422d98 lw r2,0x2d98(r2)         |r2 = Target data pointer
001864b0: 00000000 nop                      |
001864b4: 9042005a lbu r2,0x005a(r2)        |r2 = Target 4rd set of Current statuses
001864b8: 00000000 nop                      |
001864bc: 30420006 andi r2,r2,0x0006        |r2 <> 0x00 if Target has frog or chicken
001864c0: 1040000b beq r2,r0,0x001864f0     #If the Target has Frog or Chicken 
001864c4: 00000000 nop                          |
001864c8: 3c048019 lui r4,0x8019                |
001864cc: 248438ce addiu r4,r4,0x38ce           |r4 = Current Ability XA pointer
001864d0: 84830000 lh r3,0x0000(r4)             |r3 = Ability XA
001864d4: 00000000 nop                          |
001864d8: 00031040 sll r2,r3,0x01               |XA * 2
001864dc: 00431021 addu r2,r2,r3                |XA * 3
001864e0: 00021fc2 srl r3,r2,0x1f               |r3 = highest bit of r3 (should be 0x00 else 0x01)
001864e4: 00431021 addu r2,r2,r3                |XA eventually high rounded
001864e8: 00021043 sra r2,r2,0x01               |XA * 3 / 2
001864ec: a4820000 sh r2,0x0000(r4)             |Store new XA (150% of initial XA)
001864f0: 03e00008 jr r31                   END
001864f4: 00000000 nop

Warning : this routine don't save r31 (and don't set his stack pointer) do not jal from here without resolving it    

Return Locations

Battle.bin
00188764: Magical Support/Status/Compat
00189018: Formula 0E - Dmg (Y)% Hit F(MA+X)% 100% Status Hide Status