diff --git a/rslib/src/scheduler/queue/builder/gathering.rs b/rslib/src/scheduler/queue/builder/gathering.rs index fb6274de5..293b50dc4 100644 --- a/rslib/src/scheduler/queue/builder/gathering.rs +++ b/rslib/src/scheduler/queue/builder/gathering.rs @@ -61,28 +61,26 @@ impl QueueBuilder { } fn gather_new_cards(&mut self, col: &mut Collection) -> Result<()> { + let salt = Self::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), - ), + NewCardGatherPriority::DeckThenRandomNotes => { + self.gather_new_cards_by_deck(col, NewCardSorting::RandomNotes(salt)) + } NewCardGatherPriority::LowestPosition => { self.gather_new_cards_sorted(col, NewCardSorting::LowestPosition) } NewCardGatherPriority::HighestPosition => { self.gather_new_cards_sorted(col, NewCardSorting::HighestPosition) } - NewCardGatherPriority::RandomNotes => self.gather_new_cards_sorted( - col, - NewCardSorting::RandomNotes(self.context.timing.days_elapsed), - ), - NewCardGatherPriority::RandomCards => self.gather_new_cards_sorted( - col, - NewCardSorting::RandomCards(self.context.timing.days_elapsed), - ), + NewCardGatherPriority::RandomNotes => { + self.gather_new_cards_sorted(col, NewCardSorting::RandomNotes(salt)) + } + NewCardGatherPriority::RandomCards => { + self.gather_new_cards_sorted(col, NewCardSorting::RandomCards(salt)) + } } } @@ -169,4 +167,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) + } }