Another idea is to use a 14-bit linear-feedback shift register (LFSR) with taps 0x3000, for a cycle of 11811. You could also sum the output of this and the LCG suggested by @Dannii to increase the range and get a longer period (with some repeats).

Here’s a way to implement the LFSR in Dialog:

```
(global variable (seed 1))
(get random $X)
(seed $S)
(if) ($S < 4096) (then)
($LowBits = $S)
($Carry = 0)
(elseif) ($S < 8192) (then)
($LowBits = $S)
($Carry = 1)
(elseif) ($S < 12288) (then)
($S minus 8192 into $LowBits)
($Carry = 1)
(else)
($S minus 8192 into $LowBits)
($Carry = 0)
(endif)
($LowBits plus $LowBits into $Shifted)
($Shifted plus $Carry into $X)
(now) (seed $X)
```

Would you be helped by a Dialog feature to let you control the random seed of the built-in PRNG?