Difference between revisions of "Get number of clockticks till able to revive dead unit"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<font face='Courier New'>
+
'''BATTLE.BIN''' :  - Get number of clockticks till able to revive dead unit
Get number of clockticks till able to revive dead unit
+
  ------------------------------------------------------------------------------------------
  <font face='Courier New'>
+
Parameter : r4 = Unit Data pointer (Target)
 
+
Return : r2 = Nb of ClockTicks before end of death counter
  00199c88: 90860038 lbu r6,0x0038(r4)             load speed
+
          r2 = 0x7fffffff if not calculable
  00199c8c: 00000000 nop
+
------------------------------------------------------------------------------------------
  00199c90: 10c00010 beq r6,r0,0x00199cd4           branch if none
+
00199c88: 90860038 lbu r6,0x0038(r4)         |{{f/load|Unit Speed}}
  00199c94: 3c027fff lui r2,0x7fff
+
00199c8c: 00000000 nop                       |
  00199c98: 90820058 lbu r2,0x0058(r4)           load status
+
00199c90: 10c00010 beq r6,r0,0x00199cd4     {{f/Cond|<nowiki>If Unit speed = 0 then </nowiki>}} {{f/loc|Exit and returns 0x7fffffff}}
  00199c9c: 00000000 nop
+
00199c94: 3c027fff lui r2,0x7fff                 |
  00199ca0: 30420020 andi r2,r2,0x0020
+
00199c98: 90820058 lbu r2,0x0058(r4)         |{{f/load|Unit Current Status set 1}}
  00199ca4: 1040000b beq r2,r0,0x00199cd4           branch if not dead
+
00199c9c: 00000000 nop                       |
  00199ca8: 3c027fff lui r2,0x7fff
+
00199ca0: 30420020 andi r2,r2,0x0020         |
  00199cac: 9082005a lbu r2,0x005a(r4)             load status
+
00199ca4: 1040000b beq r2,r0,0x00199cd4     {{f/Cond|If Unit is has not dead status}} {{f/loc|Exit and returns 0x7fffffff}}
  00199cb0: 00000000 nop
+
00199ca8: 3c027fff lui r2,0x7fff                 |
  00199cb4: 30420020 andi r2,r2,0x0020
+
00199cac: 9082005a lbu r2,0x005a(r4)         |{{f/load|Unit Current Status set 3}}
  00199cb8: 14400006 bne r2,r0,0x00199cd4         branch if reraise
+
00199cb0: 00000000 nop                       |
  00199cbc: 3c027fff lui r2,0x7fff
+
00199cb4: 30420020 andi r2,r2,0x0020         |
  00199cc0: 90830007 lbu r3,0x0007(r4)           load death counter
+
00199cb8: 14400006 bne r2,r0,0x00199cd4     {{f/Cond|If Dead Unit has reraise}} {{f/loc|Exit and returns 0x7fffffff}}
  00199cc4: 340200ff ori r2,r0,0x00ff
+
00199cbc: 3c027fff lui r2,0x7fff                 |
  00199cc8: 14620004 bne r3,r2,0x00199cdc         branch if knocked out
+
00199cc0: 90830007 lbu r3,0x0007(r4)         |{{f/load|Unit Death counter}}
  00199ccc: 00602821 addu r5,r3,r0
+
00199cc4: 340200ff ori r2,r0,0x00ff         |
  00199cd0: 3c027fff lui r2,0x7fff
+
00199cc8: 14620004 bne r3,r2,0x00199cdc     {{f/Cond|If Unit death counter <> 0xff : }} {{f/loc|Go to get number of ticks section}}
  00199cd4: 08066746 j 0x00199d18               return 7fffffff
+
00199ccc: 00602821 addu r5,r3,r0                 |{{f/std|Pass death counter on r5}}
  00199cd8: 3442ffff ori r2,r2,0xffff
+
00199cd0: 3c027fff lui r2,0x7fff             |
 
+
00199cd4: 08066746 j 0x00199d18             {{f/jump|<nowiki>Else : If Unit death counter = 0xff</nowiki>}} {{f/loc|Exit and returns 0x7fffffff}}
  00199cdc: 00051040 sll r2,r5,0x01             death counter*2
+
00199cd8: 3442ffff ori r2,r2,0xffff             |
  00199ce0: 00451021 addu r2,r2,r5               *3
+
                  {{f/sec|Get number of Ticks (Dead unit- no reraise - valid speed - death counter <> 0xff)}}
  00199ce4: 000210c0 sll r2,r2,0x03             *24
+
00199cdc: 00051040 sll r2,r5,0x01               |{{f/std|Death counter (DC) * 2}}
  00199ce8: 00451021 addu r2,r2,r5               *25
+
00199ce0: 00451021 addu r2,r2,r5                 |{{f/std|DC * 3}}
  00199cec: 00022880 sll r5,r2,0x02             *100
+
00199ce4: 000210c0 sll r2,r2,0x03               |{{f/std|DC *24}}
  00199cf0: 90830039 lbu r3,0x0039(r4)           load CT
+
00199ce8: 00451021 addu r2,r2,r5                 |{{f/std|DC *25}}
  00199cf4: 24a20064 addiu r2,r5,0x0064         +100
+
00199cec: 00022880 sll r5,r2,0x02               |{{f/std|DC *100}}
  00199cf8: 00432823 subu r5,r2,r3               result - CT
+
00199cf0: 90830039 lbu r3,0x0039(r4)             |{{f/load|Unit CT}}
  00199cfc: 00a6001a div r5,r6                   result - CT / speed
+
00199cf4: 24a20064 addiu r2,r5,0x0064           |{{f/std|DC * 100 + 100}}
  00199d00: 00001812 mflo r3                     r3 = clockticks till can revive unit
+
00199cf8: 00432823 subu r5,r2,r3                 |{{f/std|End of DC (practical)}}
  00199d04: 00001010 mfhi r2                     r2 = remainder (add 1 clocktick)
+
00199cfc: 00a6001a div r5,r6                     |
  00199d08: 10400003 beq r2,r0,0x00199d18       branch if no remainder
+
00199d00: 00001812 mflo r3                       |{{f/std|End of DC / Speed}}
  00199d0c: 00601021 addu r2,r3,r0
+
00199d04: 00001010 mfhi r2                       |{{f/std|Remainder CT}}
  00199d10: 24630001 addiu r3,r3,0x0001
+
00199d08: 10400003 beq r2,r0,0x00199d18         {{f/Cond|<nowiki>If remainder = 0x00 </nowiki>}} {{f/loc|Exit and returns nb of clockticks before end of death counter}}
  00199d14: 00601021 addu r2,r3,r0             return number of clockticks till can revive unit
+
00199d0c: 00601021 addu r2,r3,r0                 |
  00199d18: 03e00008 jr r31
+
00199d10: 24630001 addiu r3,r3,0x0001           |{{f/std|Add one turn to quotient}}
  00199d1c: 00000000 nop
+
00199d14: 00601021 addu r2,r3,r0                 |{{f/loc|If remainder <> 0x00 add one turn}}
  </font></font>
+
00199d18: 03e00008 jr r31
 +
00199d1c: 00000000 nop
 +
===Return locations===
 +
  '''BATTLE.BIN'''
 +
  0019b8a0: [[AI_Targeting_Matrix_Analysis_(0019b7b8)]]
 +
  0019e7b4: [[AI_Ability_Use_Decisions]]

Latest revision as of 14:08, 30 March 2024

BATTLE.BIN :  - Get number of clockticks till able to revive dead unit
------------------------------------------------------------------------------------------
Parameter : r4 = Unit Data pointer (Target)
Return : r2 = Nb of ClockTicks before end of death counter
         r2 = 0x7fffffff if not calculable
------------------------------------------------------------------------------------------
00199c88: 90860038 lbu r6,0x0038(r4)         |Unit Speed
00199c8c: 00000000 nop                       |
00199c90: 10c00010 beq r6,r0,0x00199cd4      #If Unit speed = 0 then  Exit and returns 0x7fffffff
00199c94: 3c027fff lui r2,0x7fff                 |
00199c98: 90820058 lbu r2,0x0058(r4)         |Unit Current Status set 1
00199c9c: 00000000 nop                       |
00199ca0: 30420020 andi r2,r2,0x0020         |
00199ca4: 1040000b beq r2,r0,0x00199cd4      #If Unit is has not dead status Exit and returns 0x7fffffff
00199ca8: 3c027fff lui r2,0x7fff                 |
00199cac: 9082005a lbu r2,0x005a(r4)         |Unit Current Status set 3
00199cb0: 00000000 nop                       |
00199cb4: 30420020 andi r2,r2,0x0020         |
00199cb8: 14400006 bne r2,r0,0x00199cd4      #If Dead Unit has reraise Exit and returns 0x7fffffff
00199cbc: 3c027fff lui r2,0x7fff                 |
00199cc0: 90830007 lbu r3,0x0007(r4)         |Unit Death counter
00199cc4: 340200ff ori r2,r0,0x00ff          |
00199cc8: 14620004 bne r3,r2,0x00199cdc      #If Unit death counter <> 0xff :  Go to get number of ticks section
00199ccc: 00602821 addu r5,r3,r0                 |Pass death counter on r5
00199cd0: 3c027fff lui r2,0x7fff             |
00199cd4: 08066746 j 0x00199d18              >>Else : If Unit death counter = 0xff Exit and returns 0x7fffffff
00199cd8: 3442ffff ori r2,r2,0xffff              |
                  Get number of Ticks (Dead unit- no reraise - valid speed - death counter <> 0xff)
00199cdc: 00051040 sll r2,r5,0x01                |Death counter (DC) * 2
00199ce0: 00451021 addu r2,r2,r5                 |DC * 3
00199ce4: 000210c0 sll r2,r2,0x03                |DC *24
00199ce8: 00451021 addu r2,r2,r5                 |DC *25
00199cec: 00022880 sll r5,r2,0x02                |DC *100
00199cf0: 90830039 lbu r3,0x0039(r4)             |Unit CT
00199cf4: 24a20064 addiu r2,r5,0x0064            |DC * 100 + 100
00199cf8: 00432823 subu r5,r2,r3                 |End of DC (practical)
00199cfc: 00a6001a div r5,r6                     |
00199d00: 00001812 mflo r3                       |End of DC / Speed
00199d04: 00001010 mfhi r2                       |Remainder CT
00199d08: 10400003 beq r2,r0,0x00199d18          #If remainder = 0x00  Exit and returns nb of clockticks before end of death counter
00199d0c: 00601021 addu r2,r3,r0                 |
00199d10: 24630001 addiu r3,r3,0x0001            |Add one turn to quotient
00199d14: 00601021 addu r2,r3,r0                 |If remainder <> 0x00 add one turn
00199d18: 03e00008 jr r31
00199d1c: 00000000 nop

Return locations

BATTLE.BIN
 0019b8a0: AI_Targeting_Matrix_Analysis_(0019b7b8)
 0019e7b4: AI_Ability_Use_Decisions