diff --git a/rslib/src/scheduler/queue/builder/gathering.rs b/rslib/src/scheduler/queue/builder/gathering.rs index fb6274de5..8517d9d24 100644 --- a/rslib/src/scheduler/queue/builder/gathering.rs +++ b/rslib/src/scheduler/queue/builder/gathering.rs @@ -61,13 +61,14 @@ impl QueueBuilder { } fn gather_new_cards(&mut self, col: &mut Collection) -> Result<()> { + let salt = knuth_salt(self.context.timing.days_elapsed); match self.context.sort_options.new_gather_priority { NewCardGatherPriority::Deck => { self.gather_new_cards_by_deck(col, NewCardSorting::LowestPosition) } NewCardGatherPriority::DeckThenRandomNotes => self.gather_new_cards_by_deck( col, - NewCardSorting::RandomNotes(self.context.timing.days_elapsed), + NewCardSorting::RandomNotes(salt), ), NewCardGatherPriority::LowestPosition => { self.gather_new_cards_sorted(col, NewCardSorting::LowestPosition) @@ -77,11 +78,11 @@ impl QueueBuilder { } NewCardGatherPriority::RandomNotes => self.gather_new_cards_sorted( col, - NewCardSorting::RandomNotes(self.context.timing.days_elapsed), + NewCardSorting::RandomNotes(salt), ), NewCardGatherPriority::RandomCards => self.gather_new_cards_sorted( col, - NewCardSorting::RandomCards(self.context.timing.days_elapsed), + NewCardSorting::RandomCards(salt), ), } } @@ -169,4 +170,10 @@ impl QueueBuilder { true } } + + // Generates a salt for use with fnvhash. Useful to increase randomness + // when the base salt is a small integer. + fn knuth_salt(base_salt: u32) -> u32 { + base_salt.wrapping_mul(2654435761) + } }