VarAction2: Save calculated_result in shadow group struct

pull/428/head
Jonathan G Rennison 2 years ago
parent 14de8c7f34
commit 173f867e1a

@ -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;

@ -589,6 +589,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi
const SpriteGroup *default_group = dsg->default_group;
const std::vector<DeterministicSpriteGroupAdjust> *adjusts = &(dsg->adjusts);
const std::vector<DeterministicSpriteGroupRange> *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 {

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

Loading…
Cancel
Save