From 0d1d86a444c1b98f49132618569eb7a48786c662 Mon Sep 17 00:00:00 2001 From: dashodanger <> Date: Sun, 19 Jan 2025 23:12:59 -0700 Subject: [PATCH] Fix MBF21/DSDehacked state marking/allocation --- source_files/dehacked/deh_frames.cc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/source_files/dehacked/deh_frames.cc b/source_files/dehacked/deh_frames.cc index 5ba52bb92..fa6828db4 100644 --- a/source_files/dehacked/deh_frames.cc +++ b/source_files/dehacked/deh_frames.cc @@ -488,11 +488,27 @@ const State *frames::NewStateElseOld(int st_num) { if (new_states[st_num] != nullptr) return new_states[st_num]; + else if (st_num >= kTotalMBFStates) + { + State *entry = new State; + // these defaults follow the DSDehacked specs + entry->sprite = kSPR_TNT1; + entry->frame = 0; + entry->tics = -1; + entry->action = kA_NULL; + entry->next_state = st_num; + entry->arg_pointer = 0; + new_states[st_num] = entry; + return entry; + } } - else if (patch::doom_ver == 21) // DSDehacked stuff has to exist I guess - Dasho + else { - size_t to_add = st_num + 1 - new_states.size(); - for (size_t i = 0; i < to_add; i++) + while ((int)new_states.size() < st_num + 1) + { + new_states.push_back(nullptr); + } + if (st_num >= kTotalMBFStates) { State *entry = new State; // these defaults follow the DSDehacked specs @@ -502,9 +518,9 @@ const State *frames::NewStateElseOld(int st_num) entry->action = kA_NULL; entry->next_state = st_num; entry->arg_pointer = 0; - new_states.push_back(entry); + new_states[st_num] = entry; + return entry; } - return new_states[st_num]; } if (st_num < kTotalMBFStates)