Skip to content

RandomTable.roll() returning None fairly freqently. #205

Open
@ThePhantomLemon

Description

@ThePhantomLemon

To see the problem in action, get to a random map from chapter 45 on-wards.
The message "WARNING: We don't know how to spawn [None]!" should show up a number of times in the log.

Currently, whenever you roll 0, or exactly the sum of a number of item weights, nothing is spawned.
For example, if the first few items are weighted at [1,3,2,3,1...], then roll() would return "None" if the rng hits 0,1,4,6,9 or 10.
I'm assuming this is unintended behavior, but you can see pretty clearly why this happens in the code:

while roll > 0 {
  if roll < self.entries[index].weight {
    return self.entries[index].name.clone();
 }
    
  roll -= self.entries[index].weight;
  index += 1;
}

There are two easy fixes that I can see. Both effectively just looping more:

while roll >= 0 { ...

or

while index < self.entries.len() { ..

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions