add: SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT);
context: DoCommunication (PENCOUNTER_STATE pES){	if (!(CommData.AlienTransitionDesc.AnimFlags & (TALK_INTRO | TALK_DONE)))	{		AlienTalkSegue ((COUNT)~0);	}	if (GLOBAL (CurrentActivity) & CHECK_ABORT)		;	else if (pES->num_responses == 0)	{		DWORD TimeIn, TimeOut;		TimeOut = FadeMusic (0, ONE_SECOND * 3) + ONE_SECOND / 60;		TimeIn = GetTimeCounter ();		do		{			SleepThreadUntil (TimeIn + ONE_SECOND / 120);			TimeIn = GetTimeCounter ();			// Warning!  This used to re-gather input data to check for rewind.			UpdateInputState ();			if (CurrentMenuState.left)			{				FadeMusic (BACKGROUND_VOL, ONE_SECOND);				LockMutex (GraphicsLock);				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)					{						UnlockMutex (GraphicsLock);						TaskSwitch ();						LockMutex (GraphicsLock);					}				}								SpewPhrases (0);								CommData.AlienTransitionDesc.AnimFlags |= TALK_DONE;				if (CommData.AlienTalkDesc.NumFrames)				{					if ((CommData.AlienTalkDesc.AnimFlags & WAIT_TALKING))						CommData.AlienTalkDesc.AnimFlags |= PAUSE_TALKING;				}				UnlockMutex (GraphicsLock);				FlushInput ();				while (AnyButtonPress (TRUE))					TaskSwitch ();				do					TaskSwitch ();				while (CommData.AlienTalkDesc.AnimFlags & PAUSE_TALKING);				if (GLOBAL (CurrentActivity) & CHECK_ABORT)					break;				TimeOut = FadeMusic (0, ONE_SECOND * 2) + ONE_SECOND / 60;				TimeIn = GetTimeCounter ();			}		} while (TimeIn <= TimeOut);	}	else	{		BYTE response;		if (pES->top_response == (BYTE)~0)		{			pES->top_response = 0;			LockMutex (GraphicsLock);			RefreshResponses (pES);			UnlockMutex (GraphicsLock);		}		if (CurrentMenuState.select)		{			pES->phrase_buf_index =					pES->response_list[pES->cur_response].response_text.CharCount;			wstrncpy (pES->phrase_buf,					pES->response_list[pES->cur_response].response_text.pStr,					pES->phrase_buf_index);			pES->phrase_buf[pES->phrase_buf_index++] = '\0';			LockMutex (GraphicsLock);			FeedbackPlayerPhrase (pES->phrase_buf);			StopTrack ();			SetSliderImage (SetAbsFrameIndex (ActivityFrame, 2));			UnlockMutex (GraphicsLock);			FadeMusic (BACKGROUND_VOL, ONE_SECOND);			CommData.AlienTransitionDesc.AnimFlags &= ~(TALK_INTRO | TALK_DONE);			pES->num_responses = 0;			(*pES->response_list[pES->cur_response].response_func)					(pES->response_list[pES->cur_response].response_ref);		}		else if (CurrentMenuState.cancel && 				LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE)		{			TFB_SoundChain *curr;			RECT r;			TEXT t;#define DELTA_Y_SUMMARY 8#define SUMMARY_CHARS (SIS_SCREEN_WIDTH - 34) / 4#define MAX_SUMMARY_CHARS 52#define MAX_COLS ((SIS_SCREEN_HEIGHT - SLIDER_Y - SLIDER_HEIGHT - DELTA_Y_SUMMARY) / 8) - 1			UNICODE buffer[MAX_SUMMARY_CHARS];			UNICODE *temp;			int i;			int col = 0;			DWORD CurTime;			FONT fLast;			LockMutex (GraphicsLock);			DrawSISComWindow ();			FeedbackPlayerPhrase (pES->phrase_buf);			summary = TRUE;			UnlockMutex (GraphicsLock);			CurTime = GetTimeCounter ();			SleepThreadUntil (CurTime + ONE_SECOND / 30);			LockMutex (GraphicsLock);			r.corner.x = 0;			r.corner.y = 0;			r.extent.width = SIS_SCREEN_WIDTH;			r.extent.height = SIS_SCREEN_HEIGHT - SLIDER_Y - SLIDER_HEIGHT + 2;			SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x05, 0x00), 0x6E));			DrawFilledRectangle (&r);			UnlockMutex (GraphicsLock);			SetContextBackGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x05, 0x00), 0x6E));			SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x10, 0x00), 0x6B));			t.baseline.x = SAFE_X + 2;			t.align = ALIGN_LEFT;			t.baseline.y = SAFE_Y + DELTA_Y_SUMMARY;			t.CharCount = (COUNT)~0;			fLast = SetContextFont (TinyFont);			for (curr = first_chain; curr != NULL; curr = curr->next)			{				temp = curr->text;				if (temp == NULL)					continue;				// fprintf (stderr, "%s\n", temp);				while (wstrlen (temp) > (unsigned int) SUMMARY_CHARS						&& !(GLOBAL (CurrentActivity) & CHECK_ABORT))				{					int space_index;					// find last space before it goes over the max chars per line					for (i = SUMMARY_CHARS - 1; i > 0; i--)					{						if (temp[i] == ' ')						{							space_index = i;							break;						}					}					for (i = 0; i < space_index; i++, temp++)					{						buffer[i] = *temp;					}					buffer[i] = '\0';					temp++;					t.pStr = buffer;					LockMutex (GraphicsLock);					font_DrawText (&t);					UnlockMutex (GraphicsLock);					t.baseline.y += DELTA_Y_SUMMARY;					col++;					if (col > MAX_COLS)					{						t.baseline.x = SIS_SCREEN_WIDTH >> 1;						t.align = ALIGN_CENTER;						t.pStr = "_MORE_";						SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x17, 0x00), 0x01));						LockMutex (GraphicsLock);						font_DrawText (&t);						UnlockMutex (GraphicsLock);						col = 0;						t.baseline.x = SAFE_X + 2;						t.align = ALIGN_LEFT;						t.baseline.y = SAFE_Y + DELTA_Y_SUMMARY;						WaitAnyButtonOrQuit (TRUE);						LockMutex (GraphicsLock);						SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x05, 0x00), 0x6E));						DrawFilledRectangle (&r);						UnlockMutex (GraphicsLock);						SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x10, 0x00), 0x6B));					}				}							if (GLOBAL (CurrentActivity) & CHECK_ABORT)					break;												t.pStr = temp;				LockMutex (GraphicsLock);				font_DrawText (&t);				UnlockMutex (GraphicsLock);				t.baseline.y += DELTA_Y_SUMMARY;				col++;				if (col > MAX_COLS && curr->next != NULL)				{										t.baseline.x = SIS_SCREEN_WIDTH >> 1;					t.align = ALIGN_CENTER;					t.pStr = "_MORE_";					SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x17, 0x00), 0x01));					LockMutex (GraphicsLock);					font_DrawText (&t);					UnlockMutex (GraphicsLock);					col = 0;					t.baseline.x = SAFE_X + 2;					t.align = ALIGN_LEFT;					t.baseline.y = SAFE_Y + DELTA_Y_SUMMARY;					WaitAnyButtonOrQuit (TRUE);					LockMutex (GraphicsLock);					SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x05, 0x00), 0x6E));					DrawFilledRectangle (&r);					UnlockMutex (GraphicsLock);					SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x10, 0x00), 0x6B));				}			}			WaitAnyButtonOrQuit (TRUE);			LockMutex (GraphicsLock);			SetContextFont (fLast);			RefreshResponses (pES);			SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x00), 0x00));			DrawFilledRectangle (&r);			UnlockMutex (GraphicsLock);			SummaryChange = TRUE;			summary = FALSE;			FlushInput ();			while (AnyButtonPress (TRUE))				TaskSwitch ();		}		else		{			response = pES->cur_response;			if (CurrentMenuState.left)			{				FadeMusic (BACKGROUND_VOL, ONE_SECOND);				LockMutex (GraphicsLock);				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)					{						UnlockMutex (GraphicsLock);						TaskSwitch ();						LockMutex (GraphicsLock);					}				}				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);					FadeMusic (FOREGROUND_VOL, ONE_SECOND);				}				UnlockMutex (GraphicsLock);				FlushInput ();				while (AnyButtonPress (TRUE))					TaskSwitch ();				do					TaskSwitch ();				while (CommData.AlienTalkDesc.AnimFlags & PAUSE_TALKING);			}			else if (CurrentMenuState.up)				response = (BYTE)((response + (BYTE)(pES->num_responses - 1))						% pES->num_responses);			else if (CurrentMenuState.down)				response = (BYTE)((BYTE)(response + 1)						% pES->num_responses);			if (response != pES->cur_response)			{				COORD y;				LockMutex (GraphicsLock);				BatchGraphics ();				add_text (-2, &pES->response_list[pES->cur_response].response_text);				pES->cur_response = response;				y = add_text (-1, &pES->response_list[pES->cur_response].response_text);				if (response < pES->top_response)				{					pES->top_response = 0;					RefreshResponses (pES);				}				else if (y > SIS_SCREEN_HEIGHT)				{					pES->top_response = response;					RefreshResponses (pES);				}				UnbatchGraphics ();				UnlockMutex (GraphicsLock);			}		}				return (TRUE);	}	LockMutex (GraphicsLock);	if (pES->AnimTask)	{		UnlockMutex (GraphicsLock);		ConcludeTask (pES->AnimTask);		LockMutex (GraphicsLock);		pES->AnimTask = 0;	}	CommData.AlienTransitionDesc.AnimFlags &= ~(TALK_INTRO | TALK_DONE);	SetContext (SpaceContext);	DestroyContext (ReleaseContext (TaskContext));	TaskContext = 0;	UnlockMutex (GraphicsLock);	FlushPLUTXForms ();	ColorChange = FALSE;	ClearSubtitle = FALSE;	FlushColorXForms ();	StopMusic ();	StopSound ();	StopTrack ();	SleepThreadUntil (FadeMusic (FOREGROUND_VOL, 0) + ONE_SECOND / 60);	return (FALSE);}