From 32c5f2e155544b2949f4c4dc4106b444d188eea9 Mon Sep 17 00:00:00 2001 From: gewlitys Date: Tue, 22 Apr 2003 15:18:05 +0000 Subject: [PATCH] Fix glitch and lockup in dialogs when rewinding (bugs #311 and #272), from chmmravatar git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@923 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/comm.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/sc2/src/sc2code/comm.c b/sc2/src/sc2code/comm.c index 52b0f2e28..8227605b9 100644 --- a/sc2/src/sc2code/comm.c +++ b/sc2/src/sc2code/comm.c @@ -1164,6 +1164,10 @@ int ambient_anim_task(void* data) TalkAlarm = FrameRate; } } + else if (done && (ADPtr->AnimFlags & PAUSE_TALKING)) + { + ADPtr->AnimFlags &= ~(WAIT_TALKING | PAUSE_TALKING); + } } if (!summary) @@ -1734,7 +1738,35 @@ DoCommunication (INPUT_STATE InputState, PENCOUNTER_STATE pES) SetSemaphore (GraphicsSem); FeedbackPlayerPhrase (pES->phrase_buf); + CommData.AlienTransitionDesc.AnimFlags &= ~(TALK_INTRO | TALK_DONE); + if (CommData.AlienTalkDesc.NumFrames) + { + if (!(CommData.AlienTransitionDesc.AnimFlags & TALK_INTRO)) + { + CommData.AlienTransitionDesc.AnimFlags |= TALK_INTRO; + if (CommData.AlienTransitionDesc.NumFrames) + CommData.AlienTalkDesc.AnimFlags |= TALK_INTRO; + } + + CommData.AlienTransitionDesc.AnimFlags &= ~PAUSE_TALKING; + if (CommData.AlienTalkDesc.NumFrames) + CommData.AlienTalkDesc.AnimFlags |= WAIT_TALKING; + while (CommData.AlienTalkDesc.AnimFlags & TALK_INTRO) + { + ClearSemaphore (GraphicsSem); + TaskSwitch (); + SetSemaphore (GraphicsSem); + } + } + SpewPhrases (0); + + CommData.AlienTransitionDesc.AnimFlags |= TALK_DONE; + if (CommData.AlienTalkDesc.NumFrames) + { + if ((CommData.AlienTalkDesc.AnimFlags & WAIT_TALKING)) + CommData.AlienTalkDesc.AnimFlags |= PAUSE_TALKING; + } if (!(GLOBAL (CurrentActivity) & CHECK_ABORT)) { RefreshResponses (pES); @@ -1744,6 +1776,9 @@ DoCommunication (INPUT_STATE InputState, PENCOUNTER_STATE pES) FlushInput (); while (AnyButtonPress (TRUE)) TaskSwitch (); + do + TaskSwitch (); + while (CommData.AlienTalkDesc.AnimFlags & PAUSE_TALKING); } else if (GetInputYComponent (InputState) < 0) response = (BYTE)((response + (BYTE)(pES->num_responses - 1))