From 7356350d5ccc21e5b8abc3224a278a72127b2c8e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 17 May 2012 11:16:20 +0000 Subject: [PATCH] - fixed: having a state immediately followed label with a goto immediately following that label did not link the state to its proper next state. SVN r3661 (trunk) --- src/p_states.cpp | 17 +++++++++++++++++ src/thingdef/thingdef.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/src/p_states.cpp b/src/p_states.cpp index 21dd1537d..739249189 100644 --- a/src/p_states.cpp +++ b/src/p_states.cpp @@ -523,6 +523,7 @@ void FStateDefinitions::MakeStateDefines(const PClass *cls) { StateArray.Clear(); laststate = NULL; + laststatebeforelabel = NULL; lastlabel = -1; if (cls != NULL && cls->ActorInfo != NULL && cls->ActorInfo->StateList != NULL) @@ -744,11 +745,18 @@ bool FStateDefinitions::SetGotoLabel(const char *string) { // Following a state definition: Modify it. laststate->NextState = (FState*)copystring(string); laststate->DefineFlags = SDF_LABEL; + laststatebeforelabel = NULL; return true; } else if (lastlabel >= 0) { // Following a label: Retarget it. RetargetStates (lastlabel+1, string); + if (laststatebeforelabel != NULL) + { + laststatebeforelabel->NextState = (FState*)copystring(string); + laststatebeforelabel->DefineFlags = SDF_LABEL; + laststatebeforelabel = NULL; + } return true; } return false; @@ -767,11 +775,17 @@ bool FStateDefinitions::SetStop() if (laststate != NULL) { laststate->DefineFlags = SDF_STOP; + laststatebeforelabel = NULL; return true; } else if (lastlabel >=0) { RetargetStates (lastlabel+1, NULL); + if (laststatebeforelabel != NULL) + { + laststatebeforelabel->DefineFlags = SDF_STOP; + laststatebeforelabel = NULL; + } return true; } return false; @@ -790,6 +804,7 @@ bool FStateDefinitions::SetWait() if (laststate != NULL) { laststate->DefineFlags = SDF_WAIT; + laststatebeforelabel = NULL; return true; } return false; @@ -809,6 +824,7 @@ bool FStateDefinitions::SetLoop() { laststate->DefineFlags = SDF_INDEX; laststate->NextState = (FState*)(lastlabel+1); + laststatebeforelabel = NULL; return true; } return false; @@ -849,6 +865,7 @@ bool FStateDefinitions::AddStates(FState *state, const char *framechars) StateArray.Push(*state); } laststate = &StateArray[StateArray.Size() - 1]; + laststatebeforelabel = laststate; return !error; } diff --git a/src/thingdef/thingdef.h b/src/thingdef/thingdef.h index 503f67eb5..b32a15b02 100644 --- a/src/thingdef/thingdef.h +++ b/src/thingdef/thingdef.h @@ -65,6 +65,7 @@ class FStateDefinitions { TArray StateLabels; FState *laststate; + FState *laststatebeforelabel; intptr_t lastlabel; TArray StateArray; @@ -84,6 +85,7 @@ public: FStateDefinitions() { laststate = NULL; + laststatebeforelabel = NULL; lastlabel = -1; }