Pokemon RB: make stage_post_fill deterministic #4008
+10
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What is this fixing or adding?
stage_post_fill iterates sets of locations, so the iteration order is non-deterministic, resulting in different items being converted from Progression to Useful when generating with the same seed.
I don't think this currently causes any problems because the main use of these locations after stage_post_fill is playthrough calculation, which is non-deterministic to begin with, but maybe there could be problems in the future.
This patch makes stage_post_fill deterministic by sorting the duplicate pokemon locations in each sphere before choosing which of the duplicates should remain as progression.
How was this tested?
I added debug checks for deterministic results to the end of the generator (dumping the locations and items to a file with a unique name per seed and yaml combinations and comparing against the file when it already exists).
Pokemon RB would constantly fail this check beforehand. With this patch, Pokemon RB passes the check every time.