Difference between revisions of "Random Process"
Jump to navigation
Jump to search
m (linking subroutine) |
m |
||
Line 1: | Line 1: | ||
− | Random | + | Same as [[Check_if_Random_is_greater/equal_to_Chance]] |
− | 0018eed8: 27bdffe0 addiu r29,r29, | + | '''Parameters''' : r4 = Random Max Limit |
− | 0018eedc: afb00010 sw r16,0x0010(r29) | + | r5 = Threshold value |
− | 0018eee0: 00808021 addu r16,r4,r0 | + | |
− | 0018eee4: afb10014 sw r17,0x0014(r29) | + | '''Returns''' : r2 = 0x00 if Random number between 0x00 and r4 is < r5 |
− | 0018eee8: afbf0018 sw r31,0x0018(r29) | + | r2 = 0x01 if Random number between 0x00 and r4 is > r5 |
− | 0018eeec: 0c063ba8 jal 0x0018eea0 | + | -------------------------------------------------------------------------------------------------- |
− | 0018eef0: 00a08821 addu r17,r5,r0 | + | 0018eed8: 27bdffe0 addiu r29,r29,-0x0020 | |
− | 0018eef4: 00500018 mult r2,r16 | + | 0018eedc: afb00010 sw r16,0x0010(r29) | |
− | 0018eef8: 00001012 mflo r2 | + | 0018eee0: 00808021 addu r16,r4,r0 |{{f/std|<nowiki>r16 = Random limit (max value)</nowiki>}} |
− | 0018eefc: 04410002 bgez r2,0x0018ef08 | + | 0018eee4: afb10014 sw r17,0x0014(r29) | |
− | 0018ef00: 00000000 nop | + | 0018eee8: afbf0018 sw r31,0x0018(r29) | |
− | 0018ef04: 24427fff addiu r2,r2,0x7fff | + | 0018eeec: 0c063ba8 jal 0x0018eea0 |{{f/jal|Random Process, gives a number between 0-7fff|Random Number}} Returns r2 = Random number between 0x00 and 0x7fff (see [[RNG]]) |
− | 0018ef08: 000213c3 sra r2,r2,0x0f | + | 0018eef0: 00a08821 addu r17,r5,r0 |{{f/std|<nowiki>r17 = Threshold value</nowiki>}} |
− | 0018ef0c: 0051102a slt r2,r2,r17 | + | 0018eef4: 00500018 mult r2,r16 |{{f/std|Random * Limit}} |
− | 0018ef10: 38420001 xori r2,r2,0x0001 | + | 0018eef8: 00001012 mflo r2 |{{f/std|<nowiki>r2 = Random * Limit</nowiki>}} |
− | 0018ef14: 8fbf0018 lw r31,0x0018(r29) | + | 0018eefc: 04410002 bgez r2,0x0018ef08 {{f/Cond|If Random * Limit < 0x00}} |
− | 0018ef18: 8fb10014 lw r17,0x0014(r29) | + | 0018ef00: 00000000 nop | |
− | 0018ef1c: 8fb00010 lw r16,0x0010(r29) | + | 0018ef04: 24427fff addiu r2,r2,0x7fff |{{f/std|<nowiki>r2 = Positive Random*limit</nowiki>}} |
− | 0018ef20: 27bd0020 addiu r29,r29,0x0020 | + | 0018ef08: 000213c3 sra r2,r2,0x0f |{{f/std|<nowiki>r2 = Random Number between 0x00 and Limit</nowiki>}} {{f/std|<nowiki> = Limit * Random/0x8000 (Max random) </nowiki>}} |
− | 0018ef24: 03e00008 jr r31 | + | 0018ef0c: 0051102a slt r2,r2,r17 |{{f/std|<nowiki>r2 = 0x01 if Random is < Threshold value</nowiki>}} |
− | 0018ef28: 00000000 nop | + | 0018ef10: 38420001 xori r2,r2,0x0001 |r2 = 0x00 if Random is < Threshold value / Else = 0x01 |
+ | 0018ef14: 8fbf0018 lw r31,0x0018(r29) | ||
+ | 0018ef18: 8fb10014 lw r17,0x0014(r29) | ||
+ | 0018ef1c: 8fb00010 lw r16,0x0010(r29) | ||
+ | 0018ef20: 27bd0020 addiu r29,r29,0x0020 | ||
+ | 0018ef24: 03e00008 jr r31 | ||
+ | 0018ef28: 00000000 nop | ||
+ | === Return location === | ||
+ | '''Battle.bin''' | ||
+ | 0018650c: [[Critical_Hit_Calculation]] |
Latest revision as of 20:04, 27 March 2022
Same as Check_if_Random_is_greater/equal_to_Chance Parameters : r4 = Random Max Limit r5 = Threshold value Returns : r2 = 0x00 if Random number between 0x00 and r4 is < r5 r2 = 0x01 if Random number between 0x00 and r4 is > r5 -------------------------------------------------------------------------------------------------- 0018eed8: 27bdffe0 addiu r29,r29,-0x0020 | 0018eedc: afb00010 sw r16,0x0010(r29) | 0018eee0: 00808021 addu r16,r4,r0 |r16 = Random limit (max value) 0018eee4: afb10014 sw r17,0x0014(r29) | 0018eee8: afbf0018 sw r31,0x0018(r29) | 0018eeec: 0c063ba8 jal 0x0018eea0 |-->Random Number Returns r2 = Random number between 0x00 and 0x7fff (see RNG) 0018eef0: 00a08821 addu r17,r5,r0 |r17 = Threshold value 0018eef4: 00500018 mult r2,r16 |Random * Limit 0018eef8: 00001012 mflo r2 |r2 = Random * Limit 0018eefc: 04410002 bgez r2,0x0018ef08 #If Random * Limit < 0x00 0018ef00: 00000000 nop | 0018ef04: 24427fff addiu r2,r2,0x7fff |r2 = Positive Random*limit 0018ef08: 000213c3 sra r2,r2,0x0f |r2 = Random Number between 0x00 and Limit = Limit * Random/0x8000 (Max random) 0018ef0c: 0051102a slt r2,r2,r17 |r2 = 0x01 if Random is < Threshold value 0018ef10: 38420001 xori r2,r2,0x0001 |r2 = 0x00 if Random is < Threshold value / Else = 0x01 0018ef14: 8fbf0018 lw r31,0x0018(r29) 0018ef18: 8fb10014 lw r17,0x0014(r29) 0018ef1c: 8fb00010 lw r16,0x0010(r29) 0018ef20: 27bd0020 addiu r29,r29,0x0020 0018ef24: 03e00008 jr r31 0018ef28: 00000000 nop
Return location
Battle.bin 0018650c: Critical_Hit_Calculation