diff --git a/src/newgrf_optimiser.cpp b/src/newgrf_optimiser.cpp index bcd72ee7bd..c2174762eb 100644 --- a/src/newgrf_optimiser.cpp +++ b/src/newgrf_optimiser.cpp @@ -2482,6 +2482,10 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, group->dsg_flags |= DSGF_CB_HANDLER; state.have_cb_handler = true; } + if ((dsg->dsg_flags & DSGF_CB_RESULT) && !state.ignore_cb_handler) { + group->dsg_flags |= DSGF_CB_RESULT; + state.have_cb_handler = true; + } } if (sg != nullptr && sg->type == SGT_RANDOMIZED) { const RandomizedSpriteGroup *rsg = (const RandomizedSpriteGroup*)sg; @@ -2532,6 +2536,12 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, bits.set(ipsg->again, true); } } + if (sg != nullptr && sg->type == SGT_CALLBACK) { + if (!state.ignore_cb_handler) { + group->dsg_flags |= DSGF_CB_RESULT; + state.have_cb_handler = true; + } + } }); HandleGroupState default_group_state; @@ -2573,6 +2583,8 @@ void OptimiseVarAction2DeterministicSpriteGroup(VarAction2OptimiseState &state, } state.GetVarTracking(group)->in |= in_bits; } + } else { + group->dsg_flags |= DSGF_CB_RESULT; } if (possible_callback_handler) group->dsg_flags |= DSGF_CB_HANDLER; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 1d16ce71ee..6e86760e01 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -658,6 +658,7 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi if (dsg->dsg_flags & DSGF_REQUIRES_VAR1C) p += seprintf(p, lastof(this->buffer), ", REQ_1C"); if (dsg->dsg_flags & DSGF_CHECK_EXPENSIVE_VARS) p += seprintf(p, lastof(this->buffer), ", CHECK_EXP_VAR"); if (dsg->dsg_flags & DSGF_CHECK_INSERT_JUMP) p += seprintf(p, lastof(this->buffer), ", CHECK_INS_JMP"); + if (dsg->dsg_flags & DSGF_CB_RESULT) p += seprintf(p, lastof(this->buffer), ", CB_RESULT"); if (dsg->dsg_flags & DSGF_CB_HANDLER) p += seprintf(p, lastof(this->buffer), ", CB_HANDLER"); if (dsg->dsg_flags & DSGF_INLINE_CANDIDATE) p += seprintf(p, lastof(this->buffer), ", INLINE_CANDIDATE"); } diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index fffe13b6f5..95e5051b22 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -442,6 +442,7 @@ struct DeterministicSpriteGroupRange { enum DeterministicSpriteGroupFlags : uint8 { DSGF_NONE = 0, DSGF_NO_DSE = 1 << 0, + DSGF_CB_RESULT = 1 << 1, DSGF_VAR_TRACKING_PENDING = 1 << 2, DSGF_REQUIRES_VAR1C = 1 << 3, DSGF_CHECK_EXPENSIVE_VARS = 1 << 4,