Advertisement
Guest User

FE8 EvilRN (credit: SEVA)

a guest
May 22nd, 2017
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 0.94 KB | None | 0 0
  1. .thumb
  2.  
  3. .macro _blh to, reg=r3
  4.     ldr \reg, =\to
  5.     mov lr, \reg
  6.     .short 0xF800
  7. .endm
  8.  
  9. .set NextRN100, 0x08000C64
  10. .set SVCDivide, 0x080D167C
  11.  
  12. @ EvilRN (tm) formula: (Credit to SEVA :) )
  13. @ (3*(A^2)) - ((2*(A^3))/100) = TrueRN*100
  14.  
  15. @ Original routine offset: 0x08000CB8
  16. @ Args: r0 = chance; Returns: r0 = 1 if hit, 0 if miss
  17. RollHitRN:
  18.     push {r4-r5, lr}
  19.    
  20.     mov r4, r0
  21.    
  22.     _blh NextRN100 @ r0 = A
  23.    
  24.     mov r1, r0 @ r1 = A
  25.     mul r1, r0 @ r1 = A^2
  26.    
  27.     lsl r5, r1, #1 @ r5 = 2*(A^2)
  28.     add r5, r1 @ r5 = 3*(A^2)
  29.    
  30.     mul r1, r0 @ r1 = A^3
  31.    
  32.     lsl r0, r1, #1 @ r0 = 2*(A^3)
  33.     mov r1, #100 @ r1 = 100
  34.    
  35.     mul r4, r1 @ r4 = Chance*100 (doing it here since we have 100 loaded in a register)
  36.    
  37.     _blh SVCDivide @ r0 = (2*(A^3))/100
  38.    
  39.     sub r1, r5, r0 @ r1 = (3*(A^2)) - ((2*(A^3))/100)
  40.    
  41.     mov r0, #0 @ r0 = False by default
  42.    
  43.     @ Comparing Chance*100 to TrueRN*100
  44.     cmp r4, r1
  45.     ble End
  46.    
  47.     mov r0, #1
  48.    
  49. End:
  50.     pop {r4-r5}
  51.    
  52.     pop {r1}
  53.     bx r1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement