Difference between revisions of "Check if Random is greater/equal to Chance"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
General random chance function. Randomly returns False r5/r4 of the time.
+
General random chance function. Randomly returns False r5/r4 of the time.        
  
 
Args:
 
Args:
Line 9: Line 9:
 
  0..(r4-1) >= r5
 
  0..(r4-1) >= r5
  
  Check if Random >= Chance
+
  Check if Random >= Chance               '''DUPLICATED PAGE''' [[Pass/Fail_Roll]]
 +
 
  0005e0cc: 27bdffe0 addiu r29,r29,0xffe0 (if the RNG doesn't use r4/r5, r16/r17 aren't needed)
 
  0005e0cc: 27bdffe0 addiu r29,r29,0xffe0 (if the RNG doesn't use r4/r5, r16/r17 aren't needed)
 
  0005e0d0: afb00010 sw r16,0x0010(r29)
 
  0005e0d0: afb00010 sw r16,0x0010(r29)
Line 19: Line 20:
 
  0005e0e8: 00500018 mult r2,r16 Random * MOD
 
  0005e0e8: 00500018 mult r2,r16 Random * MOD
 
  0005e0ec: 00001012 mflo r2
 
  0005e0ec: 00001012 mflo r2
  0005e0f0: 04410002 bgez r2,0x 0005e0fc Check if result is >= 0 (always positive)
+
  0005e0f0: 04410002 bgez r2,0x 0005e0fc Check if result is >= 0 (though it will always be)
 
  0005e0f4: 00000000 nop
 
  0005e0f4: 00000000 nop
  0005e0f8: 24427fff addiu r2,r2,0x7fff Make value positive
+
  0005e0f8: 24427fff addiu r2,r2,0x7fff If negative, round up for division (Truncating division)
 
  0005e0fc: 000213c3 sra r2,r2,0x0f Result / 0x8000
 
  0005e0fc: 000213c3 sra r2,r2,0x0f Result / 0x8000
 
  0005e100: 0051102a slt r2,r2,r17
 
  0005e100: 0051102a slt r2,r2,r17
Line 33: Line 34:
  
  
== Return Locations ==
+
=== Return Locations ===
 
+
 
  0005cfe0: [[Calculate Learned Abilities]]
 
  0005cfe0: [[Calculate Learned Abilities]]
  00176c78:
+
  '''Battle.bin'''
  00180268:
+
00176c80:
  001807e0: [[Generate Crystal or Treasure]]
+
  00180270:
  001843b8:
+
  001807e8: [[Generate Crystal or Treasure]]
  001848f8: [[Attack Evaded Calculations]]
+
  001843c0:
  001869c4:
+
  00184900: [[Attack Evaded Calculations]]
  00187584:
+
  001869cc:
  001876a8:
+
  0018758c:
  00187988: [[Katana Break Chance]]
+
  001876b0: [[Conditional_Status_Proc_Roll_(19%25)_Inner_Routine]]
  001880e8: [[Apply status (to action)]]
+
  00187990: [[Katana Break Chance]]
  0018c6ec:
+
  001880f0: [[Apply status (to action)]]
  0018d39c: [[Chance to React]]
+
  0018c6f4:
  0018e848:
+
  0018d3a4: [[Chance to React]]
 +
  0018e850:

Latest revision as of 19:47, 4 April 2022

General random chance function. Randomly returns False r5/r4 of the time.

Args:

  • r4 = MOD = number of sides on the die
  • r5 = Chance = target to beat

Returns:

0..(r4-1) >= r5
Check if Random >= Chance                DUPLICATED PAGE Pass/Fail_Roll

0005e0cc: 27bdffe0 addiu r29,r29,0xffe0		(if the RNG doesn't use r4/r5, r16/r17 aren't needed)
0005e0d0: afb00010 sw r16,0x0010(r29)
0005e0d4: 00808021 addu r16,r4,r0		r16 = Random MOD
0005e0d8: afb10014 sw r17,0x0014(r29)
0005e0dc: afbf0018 sw r31,0x0018(r29)
0005e0e0: 0c0088c3 jal 0x0002230c		Random Number Generator
0005e0e4: 00a08821 addu r17,r5,r0		r17 = Chance
0005e0e8: 00500018 mult r2,r16			Random * MOD
0005e0ec: 00001012 mflo r2
0005e0f0: 04410002 bgez r2,0x 0005e0fc		Check if result is >= 0 (though it will always be)
0005e0f4: 00000000 nop
0005e0f8: 24427fff addiu r2,r2,0x7fff		If negative, round up for division (Truncating division)
0005e0fc: 000213c3 sra r2,r2,0x0f		Result / 0x8000
0005e100: 0051102a slt r2,r2,r17
0005e104: 38420001 xori r2,r2,0x0001		r2 = 1 if Result >= Chance
0005e108: 8fbf0018 lw r31,0x0018(r29)
0005e10c: 8fb10014 lw r17,0x0014(r29)
0005e110: 8fb00010 lw r16,0x0010(r29)
0005e114: 27bd0020 addiu r29,r29,0x0020
0005e118: 03e00008 jr r31
0005e11c: 00000000 nop


Return Locations

0005cfe0: Calculate Learned Abilities
Battle.bin
00176c80:
00180270:
001807e8: Generate Crystal or Treasure
001843c0:
00184900: Attack Evaded Calculations
001869cc:
0018758c:
001876b0: Conditional_Status_Proc_Roll_(19%)_Inner_Routine
00187990: Katana Break Chance
001880f0: Apply status (to action)
0018c6f4:
0018d3a4: Chance to React
0018e850: