get_rnd_text() for rumors and other stuff
Solve the uneven distribution situation that has been present for picking random rumors for a long time and for random engravings, epitaphs, and hallucinatory monster names since 3.6.0. This relies on the previous partial solution where short lines have been padded to a longer length. When that length is N and random seek lands in a long line of length L, retry if the position is in the first L-N characters. Put differently, it if takes more than N characters to reach the next newline, reject that random seek and try again. This effectively makes long lines behave as if they had the same length of N as the short lines have been padded to and when all lines are the same length, all entries have the same chance to be chosen.
This commit is contained in:
@@ -701,6 +701,8 @@ selection of random engravings, epitaphs, and hallucinatory monster names had
|
||||
ones which follow shorter than average lines are least likely; use
|
||||
same workaround as for rumors: pad the shortest lines; result isn't
|
||||
uniforn distribution but is better (tradeoff vs size; see makedefs)
|
||||
make selection of random rumors, engravings, epitaphs, and hallucinatory monst
|
||||
names have uniform distribution by handling long lines specially
|
||||
|
||||
|
||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||
|
||||
Reference in New Issue
Block a user