VarAction2: Save calculated_result in shadow group struct

This commit is contained in:
Jonathan G Rennison
2022-08-21 21:57:46 +01:00
parent 14de8c7f34
commit 173f867e1a
3 changed files with 8 additions and 4 deletions

View File

@@ -5788,6 +5788,7 @@ static void NewSpriteGroup(ByteReader *buf)
group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord()); group->default_group = GetGroupFromGroupID(setid, type, buf->ReadWord());
if (unlikely(shadow != nullptr)) { if (unlikely(shadow != nullptr)) {
shadow->calculated_result = ranges.size() == 0;
ProcessDeterministicSpriteGroupRanges(ranges, shadow->ranges, group->default_group); ProcessDeterministicSpriteGroupRanges(ranges, shadow->ranges, group->default_group);
shadow->default_group = group->default_group; shadow->default_group = group->default_group;

View File

@@ -589,6 +589,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi
const SpriteGroup *default_group = dsg->default_group; const SpriteGroup *default_group = dsg->default_group;
const std::vector<DeterministicSpriteGroupAdjust> *adjusts = &(dsg->adjusts); const std::vector<DeterministicSpriteGroupAdjust> *adjusts = &(dsg->adjusts);
const std::vector<DeterministicSpriteGroupRange> *ranges = &(dsg->ranges); const std::vector<DeterministicSpriteGroupRange> *ranges = &(dsg->ranges);
bool calculated_result = dsg->calculated_result;
if (SpriteGroupDumper::use_shadows) { if (SpriteGroupDumper::use_shadows) {
auto iter = _deterministic_sg_shadows.find(dsg); 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; default_group = iter->second.default_group;
adjusts = &(iter->second.adjusts); adjusts = &(iter->second.adjusts);
ranges = &(iter->second.ranges); ranges = &(iter->second.ranges);
calculated_result = iter->second.calculated_result;
} }
} }
bool is_callback_group = false; bool is_callback_group = false;
if (adjusts->size() == 1 && !dsg->calculated_result) { if (adjusts->size() == 1 && !calculated_result) {
const DeterministicSpriteGroupAdjust &adjust = (*adjusts)[0]; const DeterministicSpriteGroupAdjust &adjust = (*adjusts)[0];
if (adjust.variable == 0xC && (adjust.operation == DSGA_OP_ADD || adjust.operation == DSGA_OP_RST) 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) { && adjust.shift_num == 0 && (adjust.and_mask & 0xFF) == 0xFF && adjust.type == DSGA_TYPE_NONE) {
is_callback_group = true; 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]; const DeterministicSpriteGroupRange &first_range = (*ranges)[0];
if (first_range.low == 0 && first_range.high == 0 && first_range.group != nullptr) { if (first_range.low == 0 && first_range.high == 0 && first_range.group != nullptr) {
this->top_graphics_group = first_range.group; 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; this->top_default_group = default_group;
} }
if (dsg == this->top_default_group && !((flags & SGDF_DEFAULT) && strlen(padding) == 2)) { 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); 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); seprintf(this->buffer, lastof(this->buffer), "%scalculated_result", padding);
print(); print();
} else { } else {

View File

@@ -440,6 +440,7 @@ struct DeterministicSpriteGroupShadowCopy {
std::vector<DeterministicSpriteGroupAdjust> adjusts; std::vector<DeterministicSpriteGroupAdjust> adjusts;
std::vector<DeterministicSpriteGroupRange> ranges; std::vector<DeterministicSpriteGroupRange> ranges;
const SpriteGroup *default_group; const SpriteGroup *default_group;
bool calculated_result;
}; };
struct DeterministicSpriteGroup : SpriteGroup { struct DeterministicSpriteGroup : SpriteGroup {