Difference between revisions of "Pass/Fail Roll"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with " # ROUTINE: PASS/FAIL ROLL # Makes a (pseudo)random roll between 0 to max-1, inclusive, and checks against threshold. # Often used for percentage rolls with ma...")
 
m (Add duplicated link)
Line 1: Line 1:
  #  ROUTINE: PASS/FAIL ROLL
+
  #  ROUTINE: PASS/FAIL ROLL                   '''DUPLICATED PAGE''' [[Check_if_Random_is_greater/equal_to_Chance]]
 +
#
 
  #      Makes a (pseudo)random roll between 0 to max-1, inclusive, and checks against threshold.
 
  #      Makes a (pseudo)random roll between 0 to max-1, inclusive, and checks against threshold.
 
  #      Often used for percentage rolls with max = 100 and threshold = (percentage chance).
 
  #      Often used for percentage rolls with max = 100 and threshold = (percentage chance).

Revision as of 19:41, 4 April 2022

#   ROUTINE: PASS/FAIL ROLL                   DUPLICATED PAGE Check_if_Random_is_greater/equal_to_Chance
#
#       Makes a (pseudo)random roll between 0 to max-1, inclusive, and checks against threshold.
#       Often used for percentage rolls with max = 100 and threshold = (percentage chance).
#
#       Parameters:
#           r4 = (max) Maximum (non-inclusive) value for roll
#           r5 = (threshold) Threshold value to check against
#       Returns:
#           r2 =    1, if resulting roll >= threshold
#                   0, otherwise (resulting roll < threshold)

8005e0cc: 27bdffe0 addiu r29,r29,-0x0010
8005e0d0: afb00010 sw r16,0x0010(r29)
8005e0d4: 00808021 addu r16,r4,r0              #   max
8005e0d8: afb10014 sw r17,0x0014(r29)
8005e0dc: afbf0018 sw r31,0x0018(r29)
8005e0e0: 0c0088c3 jal 0x0002230c              #   randResult = rand();
8005e0e4: 00a08821 addu r17,r5,r0              #   threshold
8005e0e8: 00500018 mult r2,r16                 #   randResult * max
8005e0ec: 00001012 mflo r2
8005e0f0: 04410002 bgez r2,0x 0005e0fc         #   if (randResult < 0) {
8005e0f4: 00000000 nop                         #       (Affects the way negative numbers round on division)
8005e0f8: 24427fff addiu r2,r2,0x7fff          #       randResult = randResult + 0x7fff
                                               #   }
8005e0fc: 000213c3 sra r2,r2,0x0f              #   roll = randResult / 0x8000
8005e100: 0051102a slt r2,r2,r17                
8005e104: 38420001 xori r2,r2,0x0001           #   return (roll < threshold) ? 0 : 1;
8005e108: 8fbf0018 lw r31,0x0018(r29)
8005e10c: 8fb10014 lw r17,0x0014(r29)
8005e110: 8fb00010 lw r16,0x0010(r29)
8005e114: 27bd0020 addiu r29,r29,0x0020
8005e118: 03e00008 jr r31
8005e11c: 00000000 nop