diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 0117106d3b..ce6be1ca1a 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5788,6 +5788,7 @@ static void NewSpriteGroup(ByteReader *buf) group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); if (unlikely(shadow != nullptr)) { + shadow->calculated_result = ranges.size() == 0; ProcessDeterministicSpriteGroupRanges(ranges, shadow->ranges, group->default_group); shadow->default_group = group->default_group; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 018b50779a..8b73d62f4e 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -589,6 +589,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi const SpriteGroup *default_group = dsg->default_group; const std::vector *adjusts = &(dsg->adjusts); const std::vector *ranges = &(dsg->ranges); + bool calculated_result = dsg->calculated_result; if (SpriteGroupDumper::use_shadows) { auto iter = _deterministic_sg_shadows.find(dsg); @@ -596,16 +597,17 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi default_group = iter->second.default_group; adjusts = &(iter->second.adjusts); ranges = &(iter->second.ranges); + calculated_result = iter->second.calculated_result; } } bool is_callback_group = false; - if (adjusts->size() == 1 && !dsg->calculated_result) { + if (adjusts->size() == 1 && !calculated_result) { const DeterministicSpriteGroupAdjust &adjust = (*adjusts)[0]; if (adjust.variable == 0xC && (adjust.operation == DSGA_OP_ADD || adjust.operation == DSGA_OP_RST) && adjust.shift_num == 0 && (adjust.and_mask & 0xFF) == 0xFF && adjust.type == DSGA_TYPE_NONE) { is_callback_group = true; - if (*padding == 0 && !dsg->calculated_result && ranges->size() > 0) { + if (*padding == 0 && !calculated_result && ranges->size() > 0) { const DeterministicSpriteGroupRange &first_range = (*ranges)[0]; if (first_range.low == 0 && first_range.high == 0 && first_range.group != nullptr) { this->top_graphics_group = first_range.group; @@ -614,7 +616,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi } } - if (*padding == 0 && !dsg->calculated_result && default_group != nullptr) { + if (*padding == 0 && !calculated_result && default_group != nullptr) { this->top_default_group = default_group; } if (dsg == this->top_default_group && !((flags & SGDF_DEFAULT) && strlen(padding) == 2)) { @@ -665,7 +667,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi this->DumpSpriteGroup(adjust.subroutine, subroutine_padding.c_str(), 0); } } - if (dsg->calculated_result) { + if (calculated_result) { seprintf(this->buffer, lastof(this->buffer), "%scalculated_result", padding); print(); } else { diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 338cf62730..e9c20f0440 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -440,6 +440,7 @@ struct DeterministicSpriteGroupShadowCopy { std::vector adjusts; std::vector ranges; const SpriteGroup *default_group; + bool calculated_result; }; struct DeterministicSpriteGroup : SpriteGroup {