Difference between revisions of "Check if Random is greater/equal to Chance"
Jump to navigation
Jump to search
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | Check if Random >= Chance | + | 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) | 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 9: | 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 | + | 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 | + | 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 23: | Line 34: | ||
− | == Return Locations == | + | === Return Locations === |
− | + | ||
0005cfe0: [[Calculate Learned Abilities]] | 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%25)_Inner_Routine]] | |
− | + | 00187990: [[Katana Break Chance]] | |
− | + | 001880f0: [[Apply status (to action)]] | |
− | + | 0018c6f4: | |
− | + | 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: