コード例 #1
0
LOCAL void Story_OnDestroy(HWND hWindow)
/***********************************************************************/
{
	if ( bTrack )
	{
		ReleaseCapture();
		bTrack = NO;
	}
	PSTORY pStory = GetStory(hWindow);
	if (pStory)
	{
		delete pStory;
		SetStory(hWindow, NULL);
	}
}
コード例 #2
0
LOCAL BOOL Story_OnSetCursor(HWND hWindow, HWND hWndCursor, UINT codeHitTest, UINT msg)
/***********************************************************************/
{
	PSTORY pStory = GetStory(hWindow);
	if (pStory)
	{	
		POINT CursorPos;

		GetCursorPos( &CursorPos );
		ScreenToClient( hWindow, &CursorPos );
		if (pStory->FindHotSpot(CursorPos.x, CursorPos.y) >= 0)
		{
			SetCursor(pStory->m_hHotSpotCursor);
			return(TRUE);
		}
	}
	return FORWARD_WM_SETCURSOR(hWindow, hWndCursor, codeHitTest, msg, DefWindowProc);
}
コード例 #3
0
ファイル: ConnectionManager.cpp プロジェクト: chzh/xrefresh
void
CConnectionManager::ProcessMessage(Json::Value& msg)
{
	CString command = UnpackValue(msg["command"]);
	if (command==_T("AboutMe"))
	{
		m_Connected = true;
		m_Agent = UnpackValue(msg["agent"]);
		m_Version = UnpackValue(msg["version"]);
		CString log;
		log.Format(_T("Connected to %s %s"), m_Agent, m_Version);
		m_Parent->Log(log, ICON_CONNECTED);
		RequestResetLastSentTitle();
		RequestSendInfoAboutPage();
		UpdateIcon();
	}
	if (command==_T("DoRefresh"))
	{
		CString name = UnpackValue(msg["name"]);
		CString story = GetStory(msg);
		CString log;

		// test current url
		CString url = GetURL(m_Parent->GetBrowser());
		m_CS.Enter(); // m_SitesModel can be accessed by watchdog
		bool answer = m_SitesModel.Test(url);
		m_CS.Leave();

		if (answer)
		{
			log.Format(_T("Refresh request from %s: %s"), name, story);
			m_Parent->Log(log, ICON_REFRESH);
			PerformRefresh();
		}
		else
		{
			log.Format(_T("Refresh request from %s (not allowed for this site - modify 'Allowed Sites' using XRefresh toolbar icon)"), name);
			m_Parent->Log(log, ICON_CANCEL);
		}
	}
}
コード例 #4
0
LOCAL void Story_OnLButtonUp(HWND hWindow, int x, int y, UINT keyFlags)
/***********************************************************************/
{
	if ( !bTrack )
		return;
	ReleaseCapture(); bTrack = FALSE;
	DWORD dwStyle = GetWindowLong(hWindow, GWL_STYLE);
	PSTORY pStory = GetStory(hWindow);
	if (pStory && pStory->m_iHighlight)
	{
		HDC hDC = GetDC(hWindow);
 		Story_OnDraw(hWindow, hDC, &pStory->m_lpWordData[pStory->m_iHighlight-1].rArea, FALSE);
		ReleaseDC(hWindow, hDC);
		pStory->m_iHighlight = 0;
		FORWARD_WM_COMMAND(GetParent(hWindow), GET_WINDOW_ID(hWindow), hWindow, 3, SendMessage);
	}	  
//	if ( bInRect )
//	{
//		FORWARD_WM_COMMAND(GetParent(hWindow), GET_WINDOW_ID(hWindow), hWindow, 0, SendMessage);
//	}
}
コード例 #5
0
LOCAL BOOL ComputeDIBControlSize( HWND hControl, LPINT lpDX, LPINT lpDY )
/***********************************************************************/
{
	// Make sure that the DIB is uncompressed
	PSTORY pStory = GetStory(hControl);
	if (pStory && pStory->m_pDib)
	{
		if ( lpDX )
			*lpDX = (int)pStory->m_pDib->GetWidth();
		if ( lpDY )
			*lpDY = (int)abs(pStory->m_pDib->GetHeight());
	}
	else
	{
		if ( lpDX )
			*lpDX = 1;
		if ( lpDY )
			*lpDY = 1;
	}
	return( YES );
}
コード例 #6
0
LOCAL void Story_OnLButtonDown(HWND hWindow, BOOL fDoubleClick, int x, int y, UINT keyFlags)
/***********************************************************************/
{
	if ( SHIFT )
		return;
	if ( bTrack )
		return;
	PSTORY pStory = GetStory(hWindow);
	if (!pStory)
		return;
	if (pStory->m_fPlaying)
		return;

	if (pStory->m_fPlaying)
		pStory->StopPlaying();
	SetCapture( hWindow ); bTrack = TRUE;
	if ( GetFocus() != hWindow )
		SetFocus( hWindow );
	bInRect = YES;
	DWORD dwStyle = GetWindowLong(hWindow, GWL_STYLE);
	int i;
	if ((i = pStory->FindHotSpot(x, y)) >= 0)
	{
		HDC hDC = GetDC(hWindow);
		pStory->m_iHighlight = i + 1;
		Story_OnDraw(hWindow, hDC, &pStory->m_lpWordData[i].rArea, TRUE);
		if (lstrlen(pStory->m_szStoryFile))
 			pStory->m_hMCIfile = MCIOpen( App.m_hDeviceWAV, pStory->m_szStoryFile, NULL/*lpAlias*/ );
		if ( pStory->m_hMCIfile )
		{
			FORWARD_WM_COMMAND(GetParent(hWindow), GET_WINDOW_ID(hWindow), hWindow, 0, SendMessage);
			MCIPlay( pStory->m_hMCIfile, NULL, pStory->m_lpWordData[i].dwFrom, pStory->m_lpWordData[i].dwTo );
			MCIClose( pStory->m_hMCIfile );
			pStory->m_hMCIfile = NULL;
		}
		ReleaseDC(hWindow, hDC);
	}
}
コード例 #7
0
LOCAL void Story_OnDraw(HWND hWindow, HDC hDC, LPRECT lpRect, BOOL fHighlight)
/***********************************************************************/
{
	BOOL bHasFocus, bSelected, bDown;
	DWORD dwStyle;
	RECT rSrcArea, rDstArea;
	PTOON pToon = NULL;
	PDIB pdibSrc, pdibDst;
	LPOFFSCREEN lpOffScreen = NULL;

	if (IsRectEmpty(lpRect))
		return;
	PSTORY pStory = GetStory(hWindow);
	if (!pStory)
		return;
	if (!pStory->m_pDib)
		return;
	// Draw the Bitmap
	rSrcArea = *lpRect;
	rDstArea = *lpRect;

	LPSCENE lpScene = CScene::GetScene(GetParent(hWindow));
	if (lpScene)
		lpOffScreen = lpScene->GetOffScreen();
	if (lpOffScreen)
	{
	 	if ( !(pdibSrc = lpOffScreen->GetReadOnlyDIB()) )
			return;
		MapWindowPoints( hWindow, GetParent(hWindow), (LPPOINT)&rDstArea, 2 );
	}
	else
	{
		// see if there is a toon control
		HWND hToon = FindClassDescendent(GetParent(hWindow), "toon");
		if (!hToon)
			return;
		pToon = GetToon(hToon);
		if (!pToon)
			return;
		pdibSrc = pToon->GetStageDib();
		MapWindowPoints( hWindow, GetParent(hToon), (LPPOINT)&rDstArea, 2 );
 	}

	// create a dib to draw into
	pdibDst = new CDib();
	if (!pdibDst)
		return;
	if (!pdibDst->Create(pdibSrc->GetBitCount(),
						lpRect->right-lpRect->left,
						lpRect->bottom-lpRect->top))
	{
		delete pdibDst;
		return;
	}
	pdibDst->CopyColorTable(pdibSrc);
	
	// copy our color table into the dest dib
	dwStyle = GetWindowLong( hWindow, GWL_STYLE );
	bHasFocus = ( GetFocus() == hWindow );
	bDown = ( bSelected || (bTrack && bInRect && bHasFocus) );

	// draw in background
	pdibSrc->DibBlt( pdibDst,
					0, 0,
				 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
				 	rDstArea.left, rDstArea.top,
				 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
				 	NO /*bTransparent*/ );

	// now draw in foreground
	RGBTRIPLE rgb;
	LPRGBTRIPLE lpRGB = NULL;
	if (dwStyle & BS_MASK)
	{
		STRING szColor;
		GetWindowText(hWindow, szColor, sizeof(szColor));
		AsciiRGB( szColor, &rgb );
		if (fHighlight)
		{
			// this relies on the fact that AsciiRGB replaces commas
			// with NULL terminators
			LPTSTR lp = szColor + lstrlen(szColor) + 1; // passed red
			lp += lstrlen(lp) + 1; // passed green
			lp += lstrlen(lp) + 1; // passed blue to higlight color
			AsciiRGB(lp, &rgb);
			rgb.rgbtRed = rgb.rgbtGreen = 0; rgb.rgbtBlue = 255;
		}
		else
			rgb.rgbtRed = rgb.rgbtGreen = rgb.rgbtBlue = 0;
		lpRGB = &rgb;
	}
	pStory->m_pDib->DibBlt( pdibDst,
				0, 0,
				rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
				rSrcArea.left, rSrcArea.top,
				rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top,
				YES /*bTransparent*/, lpRGB, App.m_lpLut );

	pdibDst->DCBlt( hDC,
				rSrcArea.left, rSrcArea.top,
				rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top,
			 	0, 0,
				rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top);

	delete pdibDst;
}
コード例 #8
0
LOCAL void Story_OnDraw(HWND hWindow, HDC hDC, LPRECT lpRect, BOOL fHighlight)
/***********************************************************************/
{
	BOOL bHasFocus, bSelected, bDown;
	DWORD dwStyle;
	RECT rSrcArea, rDstArea;
	POINT ptDst;
	PDIB pdibSrc, pdibDst, pDib;
	LPOFFSCREEN lpOffScreen;
	PTOON pToon;
	LPSCENE lpScene;
	PSTORY pStory;
	RGBQUAD rgbQuad[256];
	BITMAPINFOHEADER bmi;
	LPTR lp;
	HDC hWinGDC;
	HPALETTE hWinGPal = NULL, hDisplayPal = NULL, hOldPal;

	if (IsRectEmpty(lpRect))
		return;
	pStory = GetStory(hWindow);
	if (!pStory)
		return;
	if (!pStory->m_pDib)
		return;
	lpScene = CScene::GetScene(GetParent(hWindow));
	if (!lpScene)
		return;

	rSrcArea = *lpRect;
	rDstArea = *lpRect;
	bSelected = GetWindowWord(hWindow, GWW_STATE );
	dwStyle = GetWindowLong( hWindow, GWL_STYLE );
	bHasFocus = ( GetFocus() == hWindow );
	bDown = ( bSelected || (bTrack && bInRect && bHasFocus) );

	lpOffScreen = lpScene->GetOffScreen();
	if (lpOffScreen)
	{
		MapWindowPoints( hWindow, GetParent(hWindow), (LPPOINT)&rDstArea, 2 );
 		if ( !(pdibSrc = lpOffScreen->GetReadOnlyDIB()) )
			return;
		if ( !(pdibDst = lpOffScreen->GetWritableDIB()) )
			return;
		hWinGDC = lpOffScreen->GetDC();
		hWinGPal = hDisplayPal = GetApp()->m_hPal;
	}
	else
	{
		// fix
		HWND hToon = FindClassDescendent(GetParent(hWindow), "toon");
		if (!hToon)
			return;
		pToon = GetToon(hToon);
		if (!pToon)
			return;
		MapWindowPoints( hWindow, pToon->GetWindow(), (LPPOINT)&rDstArea, 2 );
		pdibSrc = pToon->GetStageDib();
		lp = ToonGetDIBPointer(pToon->GetToonHandle(), &bmi);
		ToonGetColors(pToon->GetToonHandle(), 0, 256, rgbQuad);
		bmi.biClrUsed = 256;
		pdibDst = new CDib(&bmi, rgbQuad, lp);
		if (!pdibDst)
			return;
		hWinGDC = ToonDC(pToon->GetToonHandle());
		// to make sure we don't change the system palette
		hDisplayPal = CopySystemPalette();
		// to match WinG dib
		hWinGPal = CreateCustomPalette(rgbQuad, 256);
	}

	if (!pStory->m_fMappedToPalette && ((dwStyle & BS_MASK) == 0))
	{
		pStory->m_pDib->MapToPalette(hWinGPal);
		pStory->m_fMappedToPalette = TRUE;
	}


	// Copy source dib so we can twiddle its bits
	pDib = new CDib();
	if (!pDib)
	{
		if (!lpOffScreen && hDisplayPal)
			DeleteObject(hDisplayPal);
		if (!lpOffScreen && hWinGPal)
			DeleteObject(hWinGPal);
		return;
	}
	if (!pDib->Create(pStory->m_pDib->GetBitCount(),
						lpRect->right-lpRect->left,
						lpRect->bottom-lpRect->top))
	{
		delete pDib;
		if (!lpOffScreen && hDisplayPal)
			DeleteObject(hDisplayPal);
		if (!lpOffScreen && hWinGPal)
			DeleteObject(hWinGPal);
		return;
	}
	pDib->CopyColorTable(pStory->m_pDib);
	// draw in source bitmap
	pStory->m_pDib->DibBlt( pDib,
					0, 0,
				 	rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top,
				 	rSrcArea.left, rSrcArea.top,
				 	rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top,
				 	NO /*bTransparent*/ );
	
	if ( pdibSrc->GetCompression() == BI_RLE8 ||
		 pdibDst->GetCompression() == BI_RLE8)
	{ // compressed DIBs must use GDI copying (lose transparency ability)
		pdibSrc->DCBlt( hWinGDC,
						rDstArea.left, rDstArea.top,
					 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
						rDstArea.left, rDstArea.top,
					 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top );
	}
	else
	{
		pdibSrc->DibBlt( pdibDst,
						rDstArea.left, rDstArea.top,
					 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
					 	rDstArea.left, rDstArea.top,
					 	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
					 	NO /*bTransparent*/ );
	}

	if ( pDib->GetCompression() == BI_RLE8 ||
		 pdibDst->GetCompression() == BI_RLE8 )
	{ // compressed DIBs must use GDI copying (lose transparency ability)
		pDib->DCBlt( hWinGDC,
					rDstArea.left, rDstArea.top,
					rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
					rSrcArea.left, rSrcArea.top,
					rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top );
	}
	else
	{
		RGBTRIPLE rgb;
		LPRGBTRIPLE lpRGB = NULL;
		if (dwStyle & BS_MASK)
		{
			STRING szColor;
			GetWindowText(hWindow, szColor, sizeof(szColor));
			AsciiRGB( szColor, &rgb );
			if (fHighlight)
			{
				// this relies on the fact that AsciiRGB replaces commas
				// with NULL terminators
				LPTSTR lp = szColor + lstrlen(szColor) + 1; // passed red
				lp += lstrlen(lp) + 1; // passed green
				lp += lstrlen(lp) + 1; // passed blue to higlight color
				AsciiRGB(lp, &rgb);
				rgb.rgbtRed = rgb.rgbtGreen = 0; rgb.rgbtBlue = 255;
			}
			else
				rgb.rgbtRed = rgb.rgbtGreen = rgb.rgbtBlue = 0;
			lpRGB = &rgb;
		}
		else
		{
			BYTE bTrans = *pStory->m_pDib->GetXY(0, 0);
			LPTR lpColor = pStory->m_pDib->GetXY(1, 0);
			LPTR lpHighlight = pStory->m_pDib->GetXY(2, 0); 
			BYTE bColor = *lpColor;
			BYTE bHighlight = *lpHighlight;
			// if highlight color is the transparent color then
			// we are hiding and showing highlighted area
			// if not, then we are changing the color of highlighted area
			if (bHighlight == bTrans)
			{
				// we need to strip off highlight info if we are not
				// highlighted
				if (!fHighlight && (bColor != bTrans))
				{
					HPTR hp = pDib->GetPtr();
					DWORD dwSize = pDib->GetSizeImage();
					while (dwSize)
					{
						if (*hp != bColor)
							*hp = bTrans;
						++hp;
						--dwSize;
					}
				}
			}
			else
			{
				// we need to change the color if we are highlighted
				if (fHighlight && (bColor != bHighlight) && (bColor != bTrans))
				{
					HPTR hp = pDib->GetPtr();
					DWORD dwSize = pDib->GetSizeImage();
					while (dwSize)
					{
						if (*hp == bColor)
							*hp = bHighlight;
						++hp;
						--dwSize;
					}
				}
			}
		}
		pDib->DibBlt( pdibDst,
					rDstArea.left, rDstArea.top,
					rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
					0, 0,
					rSrcArea.right - rSrcArea.left, rSrcArea.bottom - rSrcArea.top,
					YES/*bTransparent*/, lpRGB, NULL, hWinGPal );
	}
	delete pDib;

	ptDst.x = rSrcArea.left;
	ptDst.y = rSrcArea.top;
	if (lpOffScreen)
	{
		lpOffScreen->DrawRect( hDC, &rDstArea, &ptDst );
	}
	else
	{
		//if (hDisplayPal)
		//{
		//	hOldPal = SelectPalette(hDC, hDisplayPal, FALSE);
		//	RealizePalette(hDC);
		//}
		//pdibDst->DCBlt( hDC,
		//	ptDst.x, ptDst.y,
		//	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
		//	rDstArea.left, rDstArea.top,
		//	rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top );
		WinGStretchBlt( hDC,
			ptDst.x, ptDst.y,
			rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top,
			hWinGDC,
			rDstArea.left, rDstArea.top,
			rDstArea.right - rDstArea.left, rDstArea.bottom - rDstArea.top );
		//if (hDisplayPal)
	    //{
		//	SelectPalette(hDC, hOldPal, TRUE);
	   	//	DeleteObject(hDisplayPal);
		//}
		if (hWinGPal)
			DeleteObject(hWinGPal);
	}
}
コード例 #9
0
ファイル: NETSTORY.CPP プロジェクト: mhjlam1/bam
void
NetStory::CycleEnemy()
{
	coord			celOffX,celOffY;
	BAM_Guy		*pGuy,*pOutGuy;
	uchar			color;
	bool			found=FALSE;
	uint32		calcGuy,x;
	CelHeader	*pEnemyTitle;

	if(!enemyHasSelected)
	{
		// now lets check the storyline regions
		for(x=0; x<NETMAXSTORYGUYS; x++)
		{
			pGuy = &storyGuy[x];

			if (pGuy->scrim.rect.Contains(enemyCurX,enemyCurY))
			{
				celOffX = enemyCurX - pGuy->scrim.rect.x1;
				celOffY = enemyCurY - pGuy->scrim.rect.y1;
				color = GetPixel(celOffX, celOffY, pGuy->scrim.resType, 
								pGuy->scrim.resNum, pGuy->scrim.cel);
				if (color != CI_SKIP) //we found it
				{
					found = TRUE;

					calcGuy = x;

					if (calcGuy != enemyCurrentGuy) //if new guy
					{
						if (pMono)
							pMono->Out("\nRegion is %2d, StoryLine is %d",x,GetStory(x));

						// cut old storyGuy only if there is one and un-enemy
						// isn't using it
						if (enemyCurrentGuy != -1 && enemyCurrentGuy != currentGuy)
						{
							pOutGuy = &storyGuy[enemyCurrentGuy];
							pOutGuy->fIsActive = FALSE;
							CutObject(pOutGuy->gSelf, CT_SERV | CT_ROST);
						}

						enemyCurrentGuy = calcGuy;

						// add new region outline unless enemy has the region alread active
						if(enemyCurrentGuy != currentGuy)
						{
							pOutGuy = &storyGuy[calcGuy];
							pOutGuy->fIsActive = TRUE;
							AddObject(pOutGuy->gSelf, CT_SERV | CT_ROST);
						}

						pEnemyTitle = (CelHeader *)AGetResData(gEnemyTitle);

						// clear region name
						memset(((uchar*)pEnemyTitle)+sizeof(CelHeader),SKIP_COLOR,L2R(pEnemyTitle->width) * pEnemyTitle->height);

						pFontMgr->SetRes(9050);
						SetFontColors(CI_SKIP,93,90,93,90,93,90);

						//startup new region name
						ASetString(0,0,storyNames[calcGuy], (uchar *)pEnemyTitle, pEnemyTitle->width, NULL, DG_JUST_CENTER);
						enemyTitle.SetPos(titlePos[enemyCurrentGuy*2],titlePos[enemyCurrentGuy*2+1]);
						break;
					}
				}//endif
			}//endif
		}//endfor

		//cursor outside of all guys and not used by un-enemy -shutdown current guy
		if(!found && enemyCurrentGuy != -1 && enemyCurrentGuy != currentGuy)
		{
			pOutGuy = &storyGuy[enemyCurrentGuy];
			pOutGuy->fIsActive = FALSE;
			CutObject(pOutGuy->gSelf, CT_SERV | CT_ROST);

			enemyCurrentGuy = -1;

			//shutdown last region name
			pEnemyTitle = (CelHeader *)AGetResData(gEnemyTitle);
			memset(((uchar*)pEnemyTitle)+sizeof(CelHeader),SKIP_COLOR,L2R(pEnemyTitle->width) * pEnemyTitle->height);
			enemyTitle.SetState(S_CHANGED, TRUE);
		}
	}
}
コード例 #10
0
ファイル: NETSTORY.CPP プロジェクト: mhjlam1/bam
void	
NetStory::Cycle(void)
{
	coord			celOffX,celOffY;
	BAM_Guy		*pGuy,*pOutGuy;
	BAM_ErrorPopup		*pPop;
	uchar			color;
	bool			found=FALSE;
	uint32		calcGuy,x;
	CelHeader	*ptitle;
	clock_t		newTime;

	clock_t		charTime=0;

	theX = pMouse->GetX();
	theY = pMouse->GetY();
	newTime = clock();

	if(!hasSelected)
	{
		// now lets check the storyline regions
		for(x=0; x<NETMAXSTORYGUYS; x++)
		{

			pGuy = &storyGuy[x];

			if (pGuy->scrim.rect.Contains(theX,theY))
			{
				celOffX = theX - pGuy->scrim.rect.x1;
				celOffY = theY - pGuy->scrim.rect.y1;
				color = GetPixel(celOffX, celOffY, pGuy->scrim.resType, 
								pGuy->scrim.resNum, pGuy->scrim.cel);
				if (color != CI_SKIP) //we found it
				{
					found = TRUE;

					calcGuy = x;

					if (calcGuy != currentGuy) //if new guy
					{
						if (pMono)
							pMono->Out("\nRegion is %2d, StoryLine is %d",x,GetStory(x));

						// cut old storyGuy only if there is one and the enemy
						// isn't using it
						if (currentGuy != -1 && currentGuy != enemyCurrentGuy)
						{
							pOutGuy = &storyGuy[currentGuy];
							pOutGuy->fIsActive = FALSE;
							CutObject(pOutGuy->gSelf, CT_SERV | CT_ROST);
						}

						currentGuy = calcGuy;

						// add new region outline unless enemy has the region alread active
						if(currentGuy != enemyCurrentGuy)
						{
							pOutGuy = &storyGuy[calcGuy];
							pOutGuy->fIsActive = TRUE;
							AddObject(pOutGuy->gSelf, CT_SERV | CT_ROST);
						}

						ptitle = (CelHeader *)AGetResData(gtitle);

						// clear region name
						memset(((uchar*)ptitle)+sizeof(CelHeader),SKIP_COLOR,L2R(ptitle->width) * ptitle->height);

						pFontMgr->SetRes(9050);
						SetFontColors(CI_SKIP,93,90,93,90,93,90);

						//startup new region name
						ASetString(0,0,storyNames[calcGuy], (uchar *)ptitle, ptitle->width, NULL, DG_JUST_CENTER);
						title.SetPos(titlePos[currentGuy*2],titlePos[currentGuy*2+1]);
						break;
					}
				}//endif
			}//endif
		}//endfor

		//cursor outside of all guys and not used by enemy -shutdown current guy
		if(!found && currentGuy != -1 && currentGuy != enemyCurrentGuy)
		{
			pOutGuy = &storyGuy[currentGuy];
			pOutGuy->fIsActive = FALSE;
			CutObject(pOutGuy->gSelf, CT_SERV | CT_ROST);

			currentGuy = -1;

			//shutdown last region name
			ptitle = (CelHeader *)AGetResData(gtitle);
			memset(((uchar*)ptitle)+sizeof(CelHeader),SKIP_COLOR,L2R(ptitle->width) * ptitle->height);
			title.SetState(S_CHANGED, TRUE);
		}
	}
	else //no more selecting just show next region in path or wrap up.
	{
		if(newTime > flagFlashTimer)
		{
			if (flashToggle)
			{
				flashToggle=0;
				flagGuy[currentGuy].Hide();
			}
			else
			{
		 		flashToggle++;
				flagGuy[currentGuy].Show();
			}
			flagFlashTimer = newTime + FLASH_INTERVAL;
		}
	}

	//===========================================================
	// cycle anthing else
	BAM_Room::Cycle();

	//===========================================================
	if(!SyncWithRemote())
	{
		if(!bGlobal.netDisconnect)
		{
			pMono->Out("NetStory::Cycle() - !SyncWithRemote()\n");

			bGlobal.storyLine = STORY_NONE;
			pCommMgr->Disconnect();
			bGlobal.netDisconnect = TRUE;
			bGlobal.roomMgr.newRoomMode = MM_MENU_DOUBLE;

			TRACK_MEM("BAM_ErrorPopup");	pPop = new BAM_ErrorPopup;
			pPop->SetMode(M_MODAL);
			pPop->Setup(pal.gSelf,OPTION_SQB,errorSqbNum,BR_MENU);//"connection has failed"
		}
		return;
	}

	//===========================================================
	//set enemy marker


	CycleEnemy();

	if(enemyHasSelected)
	{
		if(newTime > enemyFlagFlashTimer)
		{
			if (enemyFlashToggle)
			{
				enemyFlashToggle=0;
				enemyFlagGuy[enemyCurrentGuy].Hide();
			}
			else
			{
		 		enemyFlashToggle++;
				enemyFlagGuy[enemyCurrentGuy].Show();
			}
			enemyFlagFlashTimer = newTime + FLASH_INTERVAL;
		}
	}


	//===========================================================
	if(hasSelected && enemyHasSelected && (currentGuy == enemyCurrentGuy))
	{
		//if we've synced a new rand lets use it
		if(syncedRand)
			ASeedRandom(newRand);
		else
			ASeedRandom(curRand);

		// wait a second for lingering packets to be ACKed (so no one has to
		// timeout) - Van
		ticks_t tWait = ATicks() + TICKS_PER_SEC / 2;
		while(ATicks() < tWait)
		{
			// we wont send anything, but make it possible to ACK leftover
			// packets sent to us
			UpdateTicks();
			pCommMgr->DataAvailable();
		}

		//lets sync tick counters
		ASetTicks(1001);

		int scenarioArr[15] = {
									9112,9132,9152,
									9172,9192,9212,
									9232,9252,9272,
									9292,9312,9332,
									9352,9372,9392,
									};

		int tmpNum = scenarioArr[currentGuy];

		sprintf(pBam->scenarioName,"%d",tmpNum);

		bGlobal.roomMgr.NewRoom(BR_WORLD);
		worldEnder = TRUE;
	}
}