luckytyphlosion

Prism Random function.

Dec 4th, 2017
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Random::
  2.     ; just like the stock RNG, this exits with the value in [hRandomSub]
  3.     push hl
  4.     push bc
  5.     push de
  6.     call UpdateDividerCounters
  7.     call CycleRNGState ; exits with hl = wRNGState + 3
  8.     ld a, [rDIV]
  9.     add a, [hl]
  10.     ld [hRandomAdd], a
  11.     ld a, [hli]
  12.     inc hl
  13.     inc hl
  14.     sub [hl]
  15.     ld [hRandomSub], a
  16.     pop de
  17.     pop bc
  18.     pop hl
  19.     ret
  20.  
  21. CycleRNGState::
  22.     ld hl, wRNGState
  23.     ld a, [hli]
  24.     ld b, a
  25.     ld a, [hli]
  26.     ld c, a
  27.     ld a, [hli]
  28.     ld d, a
  29.     ld e, [hl]
  30.     ld a, e
  31.     sla a
  32.     xor b
  33.     ld b, a
  34.     ld a, d
  35.     rla
  36.     ld l, c
  37.     rl l
  38.     ld h, b
  39.     rl h
  40.     sbc a
  41.     and 1
  42.     xor c
  43.     ld c, a
  44.     ld a, h
  45.     xor d
  46.     ld d, a
  47.     ld a, l
  48.     xor e
  49.     ld e, a
  50.     ld h, b
  51.     ld l, c
  52.     push hl
  53.     ld h, d
  54.     ld a, e
  55.     rept 2
  56.         sla e
  57.         rl d
  58.         rl c
  59.         rl b
  60.     endr
  61.     xor e
  62.     ld e, a
  63.     ld a, h
  64.     xor d
  65.     ld d, a
  66.     pop hl
  67.     ld a, l
  68.     xor c
  69.     ld c, a
  70.     ld a, h
  71.     xor b
  72.     ld hl, wRNGState
  73.     ld [hli], a
  74.     ld a, c
  75.     ld [hli], a
  76.     ld a, d
  77.     ld [hli], a
  78.     ld [hl], e
  79.     ret
  80.  
  81. UpdateDividerCounters:
  82.     ld a, [rDIV]
  83.     ld hl, wRNGCumulativeDividerMinus
  84.     sbc [hl]
  85.     ld [hld], a
  86.     ld a, [rDIV]
  87.     adc [hl]
  88.     ld [hld], a
  89.     ret nc
  90.     inc [hl]
  91.     ret
  92.  
  93. AdvanceRNGState:
  94.     ld hl, wRNGState
  95.     ld a, [hli]
  96.     ld b, a
  97.     ld a, [hli]
  98.     ld c, a
  99.     ld a, [hli]
  100.     ld d, a
  101.     ld a, [hli]
  102.     ld e, a
  103.     ld a, [hli]
  104.     ld l, [hl]
  105.     ld h, a
  106.     ld a, [rDIV]
  107.     rra
  108.     jr nc, .try_upper
  109. .try_lower
  110.     ld a, h
  111.     cp d
  112.     jr nz, .lower
  113.     ld a, l
  114.     cp e
  115.     jr nz, .lower
  116. .upper
  117.     xor c
  118.     ld c, a
  119.     ld a, h
  120.     xor b
  121.     ld b, a
  122.     jr .done
  123. .try_upper
  124.     ld a, h
  125.     cp b
  126.     jr nz, .upper
  127.     ld a, l
  128.     cp c
  129.     jr nz, .upper
  130. .lower
  131.     ld a, h
  132.     xor d
  133.     ld d, a
  134.     ld a, l
  135.     xor e
  136.     ld e, a
  137. .done
  138.     ld hl, wRNGState
  139.     ld a, b
  140.     ld [hli], a
  141.     ld a, c
  142.     ld [hli], a
  143.     ld a, d
  144.     ld [hli], a
  145.     ld [hl], e
  146.     ret
Add Comment
Please, Sign In to add comment