SHARE
TWEET

Prism Random function.

luckytyphlosion Dec 4th, 2017 34 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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top