Iterate over corpses in active items instead of map tiles for resurrect check #66753
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.
Summary
none
Purpose of change
Improve performance when there are necromancers in the reality bubble.
Describe the solution
Use
get_active_items_in_radius()
to grab nearby corpses only ( neglect other items, and do not iterate over tiles ). This has the advantage of lesssees()
andis_empty()
check, which are both somewhat expensive. This also makes this function not linearly slower when there are large quantities of unrelated items nearby. ( Thanks andrei8l !)I also made a cache for related map tile attributes to reduce calls of
sees()
andis_empty()
if there are many corpses in one tile.Describe alternatives you've considered
Testing
In the refugee center, with one necromancer in the backyard zombie horde, waiting for 30 minutes:
With this change:

Without this change:

Additional context