Example #1
0
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    MSG msg;

    if ( !_GameMode(hInstance, nCmdShow, 640, 480, 32) ) return FALSE;

    SpriteImage = DDLoadBitmap( DirectOBJ, "sprite_char.BMP", 0, 0 );
    BackGround  = DDLoadBitmap( DirectOBJ, "sprite_back.BMP", 0, 0 );

    DDSetColorKey( SpriteImage, RGB(0,0,0) );

	SetTimer(MainHwnd, 1, 5, _GameProc);

    while ( !_GetKeyState(VK_ESCAPE) )
    {
        if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
        {
            if ( !GetMessage(&msg, NULL, 0, 0) ) return msg.wParam;

            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }
    DestroyWindow( MainHwnd );

    return TRUE;
}
Example #2
0
/*
 * LoadIntroGFX:
 *      Loads the intro bmp's onto their surfaces
 */
void LoadIntroGFX(void)
{
    lpDDSXG = DDLoadBitmap(".\\Gfx\\xgames.hwg", 0, 0);
    lpDDSPP = DDLoadBitmap(".\\Gfx\\perpprod.hwg", 0, 0);
    lpDDSMR = DDLoadBitmap(".\\Gfx\\mystreal.hwg", 0 , 0);
    lpDDSHW = DDLoadBitmap(".\\Gfx\\hajiworld.hwg", 0, 0);
}
Example #3
0
/////////////////////////////////////////////////////////////////////////////////////////////
//We'll need placement on screen, and that's it, I guess.
int ONOFF::Initialize(RECT rect, IDirectDrawSurface ** ddS, LPDIRECTDRAW * lpDD){
	this->Value=false;//initialize the vlaue
	this->Bounds=rect;//set the screeen boundaries;
	this->dds=ddS;//set the display surface.

	//create the surfaces/load teh images
	this->ddsOff=DDLoadBitmap(*lpDD, BMP_ONOFFOFF, 0,0);
	this->ddsOn =DDLoadBitmap(*lpDD, BMP_ONOFFON , 0,0);
	DDSetColorKey(this->ddsOn, CLR_INVALID);
	DDSetColorKey(this->ddsOff, CLR_INVALID);

	//now fill in values for the srect member;
	DDSURFACEDESC ddsd;
	ZeroMemory(&ddsd, sizeof(ddsd));
	ddsd.dwSize=sizeof(ddsd);
	ddsd.dwFlags=DDSD_ALL;
	this->ddsOff->GetSurfaceDesc(&ddsd);
	this->srect.top=0;
	this->srect.left=0;
	this->srect.right=ddsd.dwWidth;
	this->srect.bottom=ddsd.dwHeight;

	this->Valid=true;
	return 0;
}
Example #4
0
int SettingsMain(){
Pass.SettingsInfo=SETTINGS_NOTHING;
Pass.ProgramFlow=PF_SETTINGS;
MSG Msg;
LRESULT Result;

ScreenHighlighted=  DDLoadBitmap(Pass.DDObject,BMP_SETTINGSH, 0, 0);
ScreenUnhighlighted=DDLoadBitmap(Pass.DDObject,BMP_SETTINGS, 0, 0);

cbOptions.Initialize(&ScreenHighlighted, &ScreenUnhighlighted, &Pass.DDBack, GetRect(   340,236,557,309), cbOptionsProc);
cbHighScores.Initialize(&ScreenHighlighted, &ScreenUnhighlighted, &Pass.DDBack, GetRect(129,134,431,215), cbHighScoresProc);
cbPlay.Initialize(&ScreenHighlighted, &ScreenUnhighlighted, &Pass.DDBack, GetRect(      465,343,600,422), cbPlayProc);
cbExit.Initialize(&ScreenHighlighted, &ScreenUnhighlighted, &Pass.DDBack, GetRect(        6, 72,129,142), cbExitProc);
cbCredits.Initialize(&ScreenHighlighted, &ScreenUnhighlighted, &Pass.DDBack, GetRect(     6,341,215,422), cbCreditsProc);



Result=FadeIn(Pass.DDObject, &Pass.DDFront,  &ScreenUnhighlighted, 0);
settingsRedrawScreen();

Result=Blit(Pass.DDBack, ScreenUnhighlighted, 0,0,640,480,0,0);
//message loop now.
while(Pass.SettingsInfo==SETTINGS_NOTHING){
if(!GetMessage(&Msg, NULL, 0, 0)){
		Pass.SettingsInfo=SETTINGS_EXIT;
		Pass.ProgramFlow=PF_EXIT;
   }
   TranslateMessage(&Msg);
   DispatchMessage(&Msg);
}

//destroy the surfaces
if(ScreenHighlighted!=NULL){
	ScreenHighlighted->Release();
	ScreenHighlighted=NULL;
	ScreenUnhighlighted->Release();
	ScreenUnhighlighted=NULL;
}

return 0;
}
Example #5
0
TEXTEDITBOX::TEXTEDITBOX(){
	//copy the desktop surface into a buffer (storage) surface.
	MakeOffScreenSurface(Pass.DDObject, StorageSurface, TEXTENTRYBOX_WIDTH, TEXTENTRYBOX_HEIGHT);
	Blit(StorageSurface, Pass.DDFront, TEXTENTRYBOX_LEFT, TEXTENTRYBOX_TOP,
								 TEXTENTRYBOX_BOTTOM, TEXTENTRYBOX_RIGHT, 0,0);
	//load the image of the text box
	EditBoxSurface=DDLoadBitmap(Pass.DDObject, BMP_TEXTEDITBOX, 0,0);

	//set up the data for the input string.
	ZeroMemory(String, sizeof(String));
	CursorPosition=0;
	StringLength=0;
}
Example #6
0
void CreditsMain(){
	CreditsInfo=CREDITS_NORMAL;
	ddsCredits=DDLoadBitmap(Pass.DDObject, BMP_CREDITS, 0, 0);
	ddsCreditsh=DDLoadBitmap(Pass.DDObject, BMP_CREDITSH, 0, 0);
	RECT rect;
	SetRect(&rect, 237, 336, 385, 417);
	ccbOK.Initialize(&ddsCreditsh, &ddsCredits, &Pass.DDBack, rect, ccbOKProc);
	int OldPF=Pass.ProgramFlow;
	Pass.ProgramFlow=PF_CREDITS;
	FadeIn(Pass.DDObject, &Pass.DDFront, &ddsCredits, 0);
	Blit(Pass.DDBack, ddsCredits, 0, 0, 640, 480, 0, 0);
MSG Msg;
	//messageloop
	while(CreditsInfo != CREDITS_EXIT){
		if(!GetMessage(&Msg, NULL, 0, 0)){
			//trying to quit
   			Pass.ProgramFlow=PF_EXIT;
	   		CreditsInfo=CREDITS_EXIT;
		}
		else{
			TranslateMessage(&Msg);
			DispatchMessage(&Msg);
		}
	}

	FadeOut(Pass.DDObject, &Pass.DDFront, &ddsCredits, 0);
	if(Pass.ProgramFlow != PF_EXIT) Pass.ProgramFlow=OldPF;

	//destroy the surfaces
	if(ddsCredits != NULL){
		ddsCredits->Release();
		ddsCredits=NULL;
		ddsCreditsh->Release();
		ddsCreditsh=NULL;
	}
	return;
}
Example #7
0
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;

	if (!_GameMode(hInstance, nCmdShow, 1280, 720, 32, false)) return FALSE;


	CommInit(NULL, NULL);
	//±×·¡ÇÈ ÃʱâÈ­
	ResourceImage[0] = DDLoadBitmap(DirectOBJ, "DATA//end1.BMP", 0, 0, SYSTEM);	
	ResourceImage[1] = DDLoadBitmap(DirectOBJ, "DATA//win.BMP", 0, 0, SYSTEM);	
	ResourceImage[2] = DDLoadBitmap(DirectOBJ, "DATA//Choice.BMP", 0, 0, SYSTEM);	
	ResourceImage[3] = DDLoadBitmap(DirectOBJ, "DATA//Money.BMP", 0, 0,SYSTEM);
	ResourceImage[4] = DDLoadBitmap(DirectOBJ, "DATA//Sonmogazi.BMP", 0, 0, SYSTEM);	
	ResourceImage[5] = DDLoadBitmap(DirectOBJ, "DATA//Button.BMP", 0, 0, SYSTEM);	
	ResourceImage[6] = DDLoadBitmap(DirectOBJ, "DATA//ZokBo.BMP", 0, 0, SYSTEM);
	ResourceImage[7] = DDLoadBitmap(DirectOBJ, "DATA//Texts.BMP", 0, 0, SYSTEM);
	ResourceImage[8] = DDLoadBitmap(DirectOBJ, "DATA//Stop.BMP", 0, 0, SYSTEM);
	ResourceImage[9] = DDLoadBitmap(DirectOBJ, "DATA//Back.BMP", 0, 0, SYSTEM);
	ResourceImage[10] = DDLoadBitmap(DirectOBJ, "DATA//main.bmp", 0, 0, SYSTEM);
	DDSetColorKey(ResourceImage[0], BLACK);
	DDSetColorKey(ResourceImage[1], BLACK);
	DDSetColorKey(ResourceImage[2], BLACK);
	DDSetColorKey(ResourceImage[3], BLACK);
	DDSetColorKey(ResourceImage[4], BLACK);
	DDSetColorKey(ResourceImage[5], BLACK);
	DDSetColorKey(ResourceImage[6], BLACK);
	DDSetColorKey(ResourceImage[7], BLACK);
	DDSetColorKey(ResourceImage[8], BLACK);
	DDSetColorKey(ResourceImage[9], BLACK);
	DDSetColorKey(ResourceImage[10], BLACK);

	//À½Çâ ÃʱâÈ­
	if (SoundCard)
	{
		
		Sound[0] = SndObjCreate(SoundOBJ, "Sound//OST.WAV", 1);
	    Sound[1] = SndObjCreate(SoundOBJ, "Sound//¹ØÀ廩±â.WAV", 1);
		Sound[2] = SndObjCreate(SoundOBJ, "Sound//Select3.WAV", 1);
		//Sound[3] = SndObjCreate(SoundOBJ, "Sound//Check.WAV", 1);
		//Sound[4] = SndObjCreate(SoundOBJ, "Sound//Start.WAV", 1);
		//3,4¹ø Àç»ýÀÌ ¾ÈµÊ. ÀÌÀ¯´Â ¸ð¸§..
	}
	turn = 0;
	randomize(); 
	Pae();
	CommSend();
	PlaySound("Sound//OST.WAV", NULL, SND_ASYNC);
		SetTimer(MainHwnd, 1, 10, NULL);

	// Main message loop
	while (GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	DestroyWindow(MainHwnd);

	return TRUE;
}
Example #8
0
/// <summary>	Initializes surfaces for direct draw</summary>
void CDDraw::LoadSurfaces()
{ 
	//	Initialize text metric, basic structure for a physical font
	//	http://msdn.microsoft.com/en-us/library/windows/desktop/dd145132(v=vs.85).aspx
	TEXTMETRIC tm;
	//	Initialize device context handler
	HDC surfDC;
	//	Populate surfDC with GDI-compatible handle of device context for the surface
	Back->GetDC(&surfDC);
	//	Populate tm structure with text metrics from device context
	//	http://msdn.microsoft.com/en-us/library/windows/desktop/dd144941(v=vs.85).aspx
	GetTextMetrics(surfDC, &tm);
	//	Set TextWidth to average character width value
	TextWidth = tm.tmAveCharWidth;
	//	Release the surfDC device context
	Back->ReleaseDC(surfDC);
	//
	//	Loading resources into surface objects
	//	
	//	Load imgArrowsRed.bmp as surface
	imgArrowsRed = DDLoadBitmap(DirectDraw, "imgArrowsRed.bmp", 0, 0);
	//	Set the color key to be transparent
	DDSetColorKey(imgArrowsRed, COLOR_TRANSPARENCY);
	imgArrows = DDLoadBitmap(DirectDraw, "imgArrows.bmp", 0, 0);
	DDSetColorKey(imgArrows, COLOR_TRANSPARENCY);
	imgBCLogo = DDLoadBitmap(DirectDraw, "imgBCLogo.bmp", 0, 0);
	//	Set the color key to black
	DDSetColorKey(imgBCLogo, 0);
	imgBlackNumbers = DDLoadBitmap(DirectDraw, "imgBlackNumbers.bmp", 0, 0);
	DDSetColorKey(imgBlackNumbers, COLOR_TRANSPARENCY);
	imgBtnStaff = DDLoadBitmap(DirectDraw, "imgBtnStaff.bmp", 0, 0);
	DDSetColorKey(imgBtnStaff, 0);
	imgBuildIcons = DDLoadBitmap(DirectDraw, "imgBuildIcons.bmp", 0, 0);
	DDSetColorKey(imgBuildIcons, 0);
	imgBuildings = DDLoadBitmap(DirectDraw, "imgBuildings.bmp", 0, 0);
	DDSetColorKey(imgBuildings, COLOR_TRANSPARENCY);
	imgBullets = DDLoadBitmap(DirectDraw, "imgBullets.bmp", 0, 0);
	DDSetColorKey(imgBullets, COLOR_TRANSPARENCY);
	imgCompany = DDLoadBitmap(DirectDraw, "imgCompany.bmp", 0, 0);
	DDSetColorKey(imgCompany, 0);
	imgCursor = DDLoadBitmap(DirectDraw, "imgCursor.bmp", 0, 0);
	DDSetColorKey(imgCursor, COLOR_TRANSPARENCY);
	imgDemolish = DDLoadBitmap(DirectDraw, "imgDemolish.bmp", 0, 0);
	DDSetColorKey(imgDemolish, COLOR_TRANSPARENCY);
	imgGround = DDLoadBitmap(DirectDraw, "imgGround.bmp", 0, 0);
	DDSetColorKey(imgGround, 0);
	imgHealth = DDLoadBitmap(DirectDraw, "imgHealth.bmp", 0, 0);
	DDSetColorKey(imgHealth, 0);
	imgInterface = DDLoadBitmap(DirectDraw, "imgInterface.bmp", 0, 0);
	DDSetColorKey(imgInterface, COLOR_TRANSPARENCY);
	imgInterfaceBottom = DDLoadBitmap(DirectDraw, "imgInterfaceBottom.bmp", 0, 0);
	DDSetColorKey(imgInterfaceBottom, COLOR_TRANSPARENCY);
	imgInventorySelection = DDLoadBitmap(DirectDraw, "imgInventorySelection.bmp", 0, 0);
	DDSetColorKey(imgInventorySelection, 0);
	imgItems = DDLoadBitmap(DirectDraw, "imgItems.bmp", 0, 0);
	DDSetColorKey(imgItems, COLOR_TRANSPARENCY);
	imgLava = DDLoadBitmap(DirectDraw, "imgLava.bmp", 0, 0);
	DDSetColorKey(imgLava, COLOR_TRANSPARENCY);
	imgLoading = DDLoadBitmap(DirectDraw, "imgLoading.bmp", 0, 0);
	DDSetColorKey(imgLoading, COLOR_TRANSPARENCY);
	imgLExplosion = DDLoadBitmap(DirectDraw, "imgLExplosion.bmp", 0, 0);
	DDSetColorKey(imgLExplosion, COLOR_TRANSPARENCY);
	imgMiniMapColors = DDLoadBitmap(DirectDraw, "imgMiniMapColors.bmp", 0, 0);
	DDSetColorKey(imgMiniMapColors, 0);
	imgMoneyBox = DDLoadBitmap(DirectDraw, "imgMoneyBox.bmp", 0, 0);
	DDSetColorKey(imgMoneyBox, COLOR_TRANSPARENCY);
	imgMoneyDown = DDLoadBitmap(DirectDraw, "imgMoneyDown.bmp", 0, 0);
	DDSetColorKey(imgMoneyDown, COLOR_TRANSPARENCY);
	imgMoneyUp = DDLoadBitmap(DirectDraw, "imgMoneyUp.bmp", 0, 0);
	DDSetColorKey(imgMoneyUp, COLOR_TRANSPARENCY);
	imgMuzzleFlash = DDLoadBitmap(DirectDraw, "imgMuzzleFlash.bmp", 0, 0);
	DDSetColorKey(imgMuzzleFlash, COLOR_TRANSPARENCY);
	imgPopulation = DDLoadBitmap(DirectDraw, "imgPopulation.bmp", 0, 0);
	DDSetColorKey(imgPopulation, COLOR_TRANSPARENCY);
	imgRadarColors = DDLoadBitmap(DirectDraw, "imgRadarColors.bmp", 0, 0);
	DDSetColorKey(imgRadarColors, 0);
	imgResearch = DDLoadBitmap(DirectDraw, "imgResearch.bmp", 0, 0);
	DDSetColorKey(imgResearch, COLOR_TRANSPARENCY);
	imgResearchComplete = DDLoadBitmap(DirectDraw, "imgResearchComplete.bmp", 0, 0);
	DDSetColorKey(imgResearchComplete, COLOR_TRANSPARENCY);
	imgRocks = DDLoadBitmap(DirectDraw, "imgRocks.bmp", 0, 0);
	DDSetColorKey(imgRocks, COLOR_TRANSPARENCY);
	imgSExplosion = DDLoadBitmap(DirectDraw, "imgSExplosion.bmp", 0, 0);
	DDSetColorKey(imgSExplosion, COLOR_TRANSPARENCY);
	imgSmoke = DDLoadBitmap(DirectDraw, "imgSmoke.bmp", 0, 0);
	DDSetColorKey(imgSmoke, COLOR_TRANSPARENCY);
	imgStar = DDLoadBitmap(DirectDraw, "imgStar.bmp", 0, 0);
	DDSetColorKey(imgStar, COLOR_TRANSPARENCY);
	imgTanks = DDLoadBitmap(DirectDraw, "imgTanks.bmp", 0, 0);
	DDSetColorKey(imgTanks, COLOR_TRANSPARENCY);
	imgTurretBase = DDLoadBitmap(DirectDraw, "imgTurretBase.bmp", 0, 0);
	DDSetColorKey(imgTurretBase, COLOR_TRANSPARENCY);
	imgTurretHead = DDLoadBitmap(DirectDraw, "imgTurretHead.bmp", 0, 0);
	DDSetColorKey(imgTurretHead, COLOR_TRANSPARENCY);
}
IDirectDrawSurface7 * cls_sprite_surface::getSpriteSurface(IDirectDrawSurface7 * lpdds,char * srcname,char * spritename,\
												   LPCSTR szBitmap,int frame_num,bool debugflag){
	//IDirectDrawSurface7 * templpdds;
	int loaded=0;
	//往素材队列放结构对象
	int current_index=this->get_max_sprite_surface(0);
#if 0
	//查询画面管理列表,如果已经载入了,更新对应数据
	this->iter=this->sprite_handler_list.begin();
	while(iter!=this->sprite_handler_list.end()){
		if ((*iter)->source_pic_name==szBitmap){
//			MessageBox(hwnd,"loaded!","info",MB_OK);
			loaded=1;
			return (*iter)->lpdds;//如果读入了直接返回画面
			break;
		}
	++iter;
	}
#endif
	if (!loaded)
		lpdds=DDLoadBitmap(lpdd,szBitmap);
	//往精灵画面数组递增1个元素
	if(current_index==1000){
	MessageBox(hwnd,"already have 100 sprite surfaces!","bug",MB_OK);
	}
	else{//如果是-1就是第一次了,加上就是下标0
	//	char buf[30];
	//	sprintf(buf,"当前最大画面管理器元素下标%d",current_index);
	//	MessageBox(hwnd,buf,"",MB_OK);
	this->sprite_surface[current_index+1].used=1;
	this->sprite_surface[current_index+1].lpddsrc=lpdds;
	this->sprite_surface[current_index+1].srcname=srcname;
	this->sprite_surface[current_index+1].sprite_numframe=frame_num;
	//this->sprite_surface[current_index+1].used=1;
	}
	this->sfmgrtemp->sprite_group_name=spritename;
	this->sfmgrtemp->source_pic_name=szBitmap;
	this->sfmgrtemp->lpdds=lpdds;
	int hasaname=0;//是不是已经有了组名
#if 0
	char itoabuf[6];
	itoa(current_index+1,itoabuf,10);
	this->sfmgrtemp->sprite_surface_array_indexes=itoabuf;//??
/*	char buf[20];
	sprintf(buf,"%s",	this->sfmgrtemp->sprite_surface_array_indexes);
	MessageBox(this->hwnd,buf,"the info",MB_OK);*/
	//往画面管理链表里添加1个节点,如果之前有节点的组名和当前spritename是一样的,就更新成这样1|2
	
	//list<SF_MGR * >::iterator iter;
	iter=this->sprite_handler_list.begin();
	while(iter!=this->sprite_handler_list.end()){
		if((*iter)->sprite_group_name==spritename){
			std::string a,b;
			a=(*iter)->sprite_surface_array_indexes;
			itoa(current_index+1,itoabuf,10);
			b=itoabuf;
			a+="|";
			a+=b;
			(*iter)->sprite_surface_array_indexes=(LPCSTR)a.c_str();
			hasaname=1;
			break;
		}
		++iter;
	}

	if(!hasaname)
		this->sprite_handler_list.push_back(sfmgrtemp);
#endif
	//查询szBitmap位图的长宽信息。
	HBITMAP hbm;
    BITMAP bm;
    // LoadImage has some added functionality in Windows 95 that allows
    // you to load a bitmap from a file on disk.
    hbm = (HBITMAP)LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0,
		LR_LOADFROMFILE|LR_CREATEDIBSECTION);
	if (hbm == NULL){
		MessageBox(this->hwnd,"无法获取位图句柄","bug",MB_OK);
		return NULL;//
	}
    GetObject(hbm, sizeof(bm), &bm); // get size of bitmap
	//创建指定数量的精灵动作画面

	int width=bm.bmWidth/frame_num;//横向依次读取n个精灵
	//alertme((int)bm.bmWidth);
	//alertme(frame_num);
	//alertme(width);
	int height=bm.bmHeight;
	//照搬windows GMP的精灵结构sprite,我把他封装到了我的SPRITE_SURFACE结构里了,再加2个成员以判断每一帧的长宽
	this->sprite_surface[0].spritename=spritename;
	int i=current_index+1;
	this->sprite_surface[i].sprite.current_frame=0;
	this->sprite_surface[i].used=1;
	this->sprite_surface[i].sprite.x=0;
	this->sprite_surface[i].sprite.y=0;
	//this->sprite_surface[i].used=1;
	//必须加1,但创建画面的时候不要,不知道为什么?否则右面1像素显示不出!
	this->sprite_surface[i].sprite.theframe_width=width;//之后可以去修改,比如动作游戏,先默认为切出来的大小。
	this->sprite_surface[i].sprite.theframe_height=height;
#if 0
	if (debugflag){//debug
		alertme(i);
		this->sprite_surface[i].sprite.theframe_width=44;
		this->sprite_surface[i].sprite.theframe_height=38;
	}
#endif
	for (int j=0;j<frame_num;j++){
		this->sprite_surface[i].sprite.frames[j]=DDraw_Create_Surface(width,height,3,1);//标记3是指使用系统内存
	}
#if 0
	if (debugflag) alertme(i);//debug
	if (debugflag){//debug
		alertme(this->sprite_surface[i].sprite.theframe_width);
		alertme(width);
		alertme(this->sprite_surface[i].sprite.theframe_height);
		
		alertme(height);
		//this->sprite_surface[i].sprite.theframe_width=44;
		//this->sprite_surface[i].sprite.theframe_height=38;
	}
#endif
	//然后读入位图到各个精灵动作画面
	RECT DestRect;RECT SrcRect;
	DestRect.top=0;DestRect.left=0;DestRect.right=width;DestRect.bottom=height;

	for (j=0;j<frame_num;j++){
		//alertme("j是");
		//alertme(j);
		SrcRect.top=0;
		SrcRect.left=0+j*width;
		//alertme("SrcRect.left是");
		//alertme(SrcRect.left);
		SrcRect.right=SrcRect.left+width;
		//alertme("SrcRect.right是");
		//alertme(SrcRect.right);
		SrcRect.bottom=height;
		//alertme("SrcRect.bottom是");
		//alertme(SrcRect.bottom);
		if(FAILED(this->sprite_surface[i].sprite.frames[j]->Blt(&DestRect, // pointer to dest RECT
		lpdds, // pointer to source surface
		&SrcRect, // pointer to source RECT
		DDBLT_WAIT, 
		&ddbltfx)))// pointer to DDBLTFX holding info
		{
			MessageBox(this->hwnd,"copy sprite surface failed!","info",MB_OK);
		}
	}
	
	//删除GDI对象
	if(!DeleteObject(hbm)){
		MessageBox(hwnd,"删除位图对象失败","",MB_OK);
	}

	return sprite_surface[current_index+1].lpddsrc;
}
void SelectSong(void)
{
	DWORD count,i;
	static DWORD current;
	static DWORD SelectCurrent;
	static int Selected, zoom,toggle,speed;

	RECT	lRect;
	int ModeTemp1p, ModeTemp2p;
	
	static	time_t t;
	
	static	int a,b,c;

	static	int iMove;

	RECT DiscSize,Screen;

	char s[50];

	if(First==0)
	{
		startTimer=timeGetTime();
		if(Start1p==FALSE)
		{
			HighSpeed1p=1;
			bModeMirror1p=FALSE;
			bModeNonstep1p=FALSE;
			bModeSynchro=FALSE;
			bModeUnion1p=FALSE;
			bModeRandom1p=FALSE;
			b4dMix1p=FALSE;
				HighSpeed1p_1=1;
				HighSpeed1p_3=1;
				HighSpeed1p_5=1;
				HighSpeed1p_7=1;
				HighSpeed1p_9=1;
			bModeVanish1p=FALSE;
			bModeSuddenR1p=FALSE;
			bModeRandomS1p=FALSE;

		}
		if(Start2p==FALSE)
		{
			HighSpeed2p=1;
			bModeMirror2p=FALSE;
			bModeNonstep2p=FALSE;
			bModeUnion2p=FALSE;
			bModeRandom2p=FALSE;
			b4dMix2p=FALSE;
				HighSpeed2p_1=1;
				HighSpeed2p_3=1;
				HighSpeed2p_5=1;
				HighSpeed2p_7=1;
				HighSpeed2p_9=1;
			bModeVanish2p=FALSE;
			bModeSuddenR1p=FALSE;
			bModeRandomS1p=FALSE;
		}
		DDFillSurface(g_pDDSPrimary,0);
		DDFillSurface(g_pDDSBack,0);
		
		//FadeToSurface(SelectBack);
		g_pDDSBack->BltFast(0,0, SelectBack, NULL, DDBLTFAST_NOCOLORKEY);
		
		a=Start1p;b=Start2p;
		First++;

		if(g_dsSelectSong)g_dsSelectSong->Play(0,0,DSBPLAY_LOOPING);
	}

	DiscSize.top=0;
	DiscSize.left=0;
	DiscSize.right=300;
	DiscSize.bottom=200;

	for(count=0;;count++)
	{
		if(count!=0)CSONG[count].Prev=count-1;
		
		CSONG[count].Next=count+1;
		
		if(CSONG[count].bpm==0)
		{
			CSONG[count].Prev=0;
			count--;
			CSONG[count].Next=0;
			CSONG[0].Prev=count;
			break;
		}
	}

	if(speed==1) //일단은 변수를 이용합니다. 곧 타이머 형식으로 바꾸도록 합시다. 
	{
		speed=0;
		if(toggle==0)
		{
			if(zoom==10)toggle=1;
			else zoom++;
		}
		else if(toggle==1)
		{
			if(zoom==0)toggle=0;
			else zoom--;
		}
	}
	else speed++; 

	ReadGameInput();

	if(PressedKey1p[5]==TRUE)
	{
		if(Start1p==FALSE)
		{
			Start1p=TRUE;
		}
	}
	if(PressedKey2p[5]==TRUE)
	{
		if(Start2p==FALSE)
		{
			Start2p=TRUE;
		}
	}

	ModeTemp1p=ScanHiddenMode1p();

	if(ModeTemp1p)if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}

	switch(ModeTemp1p)
	{
		case HMODE_SUDDENR:
			bModeSuddenR1p=TRUE;
			bModeVanish1p=FALSE;

			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_RANDOMS:
			bModeRandomS1p=TRUE;
			HighSpeed1p=1;

			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_2X:
			HighSpeed1p=2;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_4X:
			HighSpeed1p=4;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_8X:
			HighSpeed1p=8;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_MIRROR:
			bModeMirror1p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_NONSTEP:
			bModeNonstep1p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_SYNCHRO:
			bModeSynchro=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_UNION:
			bModeUnion1p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_RANDOM:
			bModeRandom1p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_4DMIX:
			srand((unsigned) time(&t));

			HighSpeed1p_1=1+rand()%8;
			HighSpeed1p_3=1+rand()%8;
			HighSpeed1p_5=1+rand()%8;
			HighSpeed1p_7=1+rand()%8;
			HighSpeed1p_9=1+rand()%8;

			b4dMix1p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_VANISH:
			bModeVanish1p=TRUE;
			bModeSuddenR2p=FALSE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
/*		case HMODE_NONSTOPDOUBLE:
			if(Start1p&&Start2p)break;
			Double=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;*/
		case HMODE_CANCEL:
			if(g_dsCancel)g_dsCancel->Play(0,0,0);
			HighSpeed1p=1;
			bModeMirror1p=FALSE;
			bModeNonstep1p=FALSE;
			bModeSynchro=FALSE;
			bModeUnion1p=FALSE;
			bModeRandom1p=FALSE;
			b4dMix1p=FALSE;
				HighSpeed1p_1=1;
				HighSpeed1p_3=1;
				HighSpeed1p_5=1;
				HighSpeed1p_7=1;
				HighSpeed1p_9=1;
			bModeVanish1p=FALSE;
			bModeSuddenR1p=FALSE;
			bModeRandomS1p=FALSE;
			Double=FALSE;
			break;
	}

	ModeTemp2p=ScanHiddenMode2p();
	if(ModeTemp2p)if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
	
	switch(ModeTemp2p)
	{
		case HMODE_SUDDENR:
			bModeSuddenR2p=TRUE;
			bModeVanish2p=FALSE;

			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_RANDOMS:
			bModeRandomS2p=TRUE;
			HighSpeed2p=1;

			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_2X:
			HighSpeed2p=2;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_4X:
			HighSpeed2p=4;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_8X:
			HighSpeed2p=8;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_MIRROR:
			bModeMirror2p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_NONSTEP:
			bModeNonstep2p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_SYNCHRO:
			bModeSynchro=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_UNION:
			bModeUnion2p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_RANDOM:
			bModeRandom2p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_4DMIX:

			srand((unsigned) time(&t));

			HighSpeed2p_1=1+rand()%8;
			HighSpeed2p_3=1+rand()%8;
			HighSpeed2p_5=1+rand()%8;
			HighSpeed2p_7=1+rand()%8;
			HighSpeed2p_9=1+rand()%8;

			b4dMix2p=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
		case HMODE_VANISH:
			bModeVanish2p=TRUE;
			bModeSuddenR2p=FALSE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
			break;
/*		case HMODE_NONSTOPDOUBLE:
			if(Start1p&&Start2p)break;
			Double=TRUE;
			if(g_dsMode){g_dsMode->Stop();g_dsMode->SetCurrentPosition(0);g_dsMode->Play(0,0,0);}
*/			break;

		case HMODE_CANCEL:
			if(g_dsCancel)g_dsCancel->Play(0,0,0);
			HighSpeed2p=1;
			bModeMirror2p=FALSE;
			bModeNonstep2p=FALSE;
			bModeUnion2p=FALSE;
			bModeRandom2p=FALSE;
			b4dMix2p=FALSE;
				HighSpeed2p_1=1;
				HighSpeed2p_3=1;
				HighSpeed2p_5=1;
				HighSpeed2p_7=1;
				HighSpeed2p_9=1;
			bModeVanish2p=FALSE;
			bModeSuddenR2p=FALSE;
			bModeRandomS2p=FALSE;
			Double=FALSE;
			break;
	}

	if((Start1p && PressedKey1p[1]) || (Start2p && PressedKey2p[1]))
	{
		if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
		if(g_dsMove){g_dsMove->Stop();g_dsMove->SetCurrentPosition(0);g_dsMove->Play(0,0,0);}

		Selected=0;

		iMove=1;
		current=CSONG[CSONG[current].Prev].Prev;
	}

	if((Start1p && PressedKey1p[3]) || (Start2p && PressedKey2p[3]))
	{
		if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
		if(g_dsMove){g_dsMove->Stop();g_dsMove->SetCurrentPosition(0);g_dsMove->Play(0,0,0);}

		Selected=0;

		iMove=-1;
		current=CSONG[CSONG[current].Next].Next;
	}
	
	if((Start1p && PressedKey1p[7]) || (Start2p && PressedKey2p[7]))
	{
		if(Selected==7)
		{
			SelectCurrent=current;
			PressedKey1p[0]=3;
		}
		else
		{
			if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
			if(g_dsMove){g_dsMove->Stop();g_dsMove->SetCurrentPosition(0);g_dsMove->Play(0,0,0);}
/*			if(CSONG[current].Int_Song)
			{
				if(g_dsSelectSong)g_dsSelectSong->Stop();
				g_Cur_Song=CSONG[current].Int_Song;
				g_Cur_Song->SetCurrentPosition(0);
				g_Cur_Song->Play(0,0,0);
			}
			else*/ if(access(CSONG[current].WavsName,04)==0)
			{
				IntroFlag=TRUE;
				intro= new CMedia;
				intro->OpenMediaFile(CSONG[current].WavsName);
				intro->OnMediaPlay();
			}
			else if(access(CSONG[current].Wavs3Name,04)==0)
			{
				IntroFlag=TRUE;
				intro= new CMedia;
				intro->OpenMediaFile(CSONG[current].Wavs3Name);
				intro->OnMediaPlay();
			}

			Selected=7;
		}
	}
	
	if((Start1p && PressedKey1p[9]) || (Start2p && PressedKey2p[9]))
	{
		if(Selected==9)
		{
			SelectCurrent=CSONG[current].Next;
			PressedKey1p[0]=3;
		}
		else
		{
			if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
			if(g_dsMove){g_dsMove->Stop();g_dsMove->SetCurrentPosition(0);g_dsMove->Play(0,0,0);}
/*			if(CSONG[CSONG[current].Next].Int_Song)
			{
				if(g_dsSelectSong)g_dsSelectSong->Stop();
				g_Cur_Song=CSONG[CSONG[current].Next].Int_Song;
				g_Cur_Song->SetCurrentPosition(0);
				g_Cur_Song->Play(0,0,0);
			}
			else */if(access(CSONG[CSONG[current].Next].WavsName,04)==0)
			{
				IntroFlag=TRUE;
				intro= new CMedia;
				intro->OpenMediaFile(CSONG[CSONG[current].Next].WavsName);
				intro->OnMediaPlay();
			}
			else if(access(CSONG[CSONG[current].Next].Wavs3Name,04)==0)
			{
				IntroFlag=TRUE;
				intro= new CMedia;
				intro->OpenMediaFile(CSONG[CSONG[current].Next].Wavs3Name);
				intro->OnMediaPlay();
			}

			Selected=9;
		}
	}

	if(PressedKey1p[0]==3)
	{
		PressedKey1p[0]=0;

		if(CSONG[SelectCurrent].HaveCrazy==TRUE)GameMode=MODE_CRAZY,Double=FALSE;
	   	else if(CSONG[SelectCurrent].HaveDouble==TRUE)GameMode=MODE_DOUBLE,Double=TRUE;
	   	else if(CSONG[SelectCurrent].HaveEasy==TRUE)GameMode=MODE_EASY,Double=FALSE;
	   	else if(CSONG[SelectCurrent].HaveHard==TRUE)GameMode=MODE_HARD,Double=FALSE;
		else return;

		if(Start1p && Start2p)
		{
			Couple=TRUE;
			if(CSONG[SelectCurrent].HaveCouple==FALSE)bModeSynchro=TRUE;
		} else Couple=FALSE;

		if(SongBack)
		{
			SongBack->Release();
			SongBack=NULL;
		}
		
		if(g_dsCancel)
		{
			g_dsCancel->Stop();
			g_dsCancel->Play(0,0,0);
		}

		if(SongTitle)
		{
			SongTitle->Release();
			SongTitle=NULL;
		}
		SongTitle = DDLoadBitmap(g_pDD,CSONG[SelectCurrent].TitlePath,0,0);
		SongBack = DDLoadBitmap(g_pDD,CSONG[SelectCurrent].BMPPath,0,0);
		if(SongBack == NULL)
		{
			if(SongTitle)SongBack=DDLoadBitmap(g_pDD,CSONG[SelectCurrent].TitlePath,0,0);
			else SongBack=DDLoadBitmap(g_pDD, "Images\\Back.bmp",0,0);
		}
		if(SongTitle == NULL)
		{
			SongTitle=DDLoadBitmap(g_pDD,"Images\\NoTitle.bmp",0,0);
			if(SongTitle)g_pDDSPrimary->BltFast(0,0,SongTitle,NULL,DDBLTFAST_NOCOLORKEY);
		}
		else g_pDDSPrimary->BltFast(0,0,SongTitle,NULL,DDBLTFAST_NOCOLORKEY);

		if(GameMode == MODE_DOUBLE)
		{
			memcpy(&Data_Double,&CSONG[SelectCurrent].Data_Double,sizeof(CSONG[SelectCurrent].Data_Double));
		}
		else if(Couple==TRUE)
		{
			switch(GameMode)
			{
				case MODE_CRAZY:
					if(bModeSynchro)
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Crazy,sizeof(CSONG[SelectCurrent].Data_Crazy));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Crazy,sizeof(CSONG[SelectCurrent].Data_Crazy));

						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data1[i][0];
							Data1[i][6]=Data1[i][1];
							Data1[i][7]=Data1[i][2];
							Data1[i][8]=Data1[i][3];
							Data1[i][9]=Data1[i][4];
						}
					}
					else
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Crazy1,sizeof(CSONG[SelectCurrent].Data_Crazy1));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Crazy1,sizeof(CSONG[SelectCurrent].Data_Crazy1));
					}
					break;
				case MODE_EASY:
					if(bModeSynchro)
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Easy,sizeof(CSONG[SelectCurrent].Data_Easy));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Easy,sizeof(CSONG[SelectCurrent].Data_Easy));
						
						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data1[i][0];
							Data1[i][6]=Data1[i][1];
							Data1[i][7]=Data1[i][2];
							Data1[i][8]=Data1[i][3];
							Data1[i][9]=Data1[i][4];
						}
					}
					else
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Easy1,sizeof(CSONG[SelectCurrent].Data_Easy1));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Easy1,sizeof(CSONG[SelectCurrent].Data_Easy1));
					}
					break;
				case MODE_HARD:
					if(bModeSynchro)
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Hard,sizeof(CSONG[SelectCurrent].Data_Hard));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Hard,sizeof(CSONG[SelectCurrent].Data_Hard));
						
						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data1[i][0];
							Data1[i][6]=Data1[i][1];
							Data1[i][7]=Data1[i][2];
							Data1[i][8]=Data1[i][3];
							Data1[i][9]=Data1[i][4];
						}
					}
					else
					{
						memcpy(&Data,&CSONG[SelectCurrent].Data_Hard1,sizeof(CSONG[SelectCurrent].Data_Hard1));
						memcpy(&Data1,&CSONG[SelectCurrent].Data_Hard1,sizeof(CSONG[SelectCurrent].Data_Hard1));
					}
					break;
			}
		}
		else 
		{
			switch(GameMode)
			{
				case MODE_CRAZY:
					if(Start1p)memcpy(&Data,CSONG[SelectCurrent].Data_Crazy,sizeof(Data));
					else
					{
						memcpy(&Data,CSONG[SelectCurrent].Data_Crazy,sizeof(Data));
						memcpy(&Data1,CSONG[SelectCurrent].Data_Crazy,sizeof(Data));
						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data[i][0];
							Data1[i][6]=Data[i][1];
							Data1[i][7]=Data[i][2];
							Data1[i][8]=Data[i][3];
							Data1[i][9]=Data[i][4];
						}
					}
					break;
				case MODE_EASY:
					if(Start1p)memcpy(&Data,CSONG[SelectCurrent].Data_Easy,sizeof(Data));
					else
					{
						memcpy(&Data,CSONG[SelectCurrent].Data_Easy,sizeof(Data));
						memcpy(&Data1,CSONG[SelectCurrent].Data_Easy,sizeof(Data));
						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data[i][0];
							Data1[i][6]=Data[i][1];
							Data1[i][7]=Data[i][2];
							Data1[i][8]=Data[i][3];
							Data1[i][9]=Data[i][4];
						}
					}
					break;
				case MODE_HARD:
					if(Start1p)memcpy(&Data,CSONG[SelectCurrent].Data_Hard,sizeof(Data));
					else
					{
						memcpy(&Data,CSONG[SelectCurrent].Data_Hard,sizeof(Data));
						memcpy(&Data1,CSONG[SelectCurrent].Data_Hard,sizeof(Data));
						for(i=0;i<MAX_DATA;i++)
						{
							Data1[i][5]=Data[i][0];
							Data1[i][6]=Data[i][1];
							Data1[i][7]=Data[i][2];
							Data1[i][8]=Data[i][3];
							Data1[i][9]=Data[i][4];
						}
					}
					break;
			}
		}

		bpm=CSONG[SelectCurrent].bpm;
		bpm2=CSONG[SelectCurrent].bpm2;
		bpm3=CSONG[SelectCurrent].bpm3;
		bunki=CSONG[SelectCurrent].Bunki;
		bunki2=CSONG[SelectCurrent].Bunki2;
		
		switch(GameMode)
		{
			case MODE_CRAZY:
				start=CSONG[SelectCurrent].Crazy_Start;
				start2=CSONG[SelectCurrent].Crazy_Start2;
				start3=CSONG[SelectCurrent].Crazy_Start3;
				tick=CSONG[SelectCurrent].Crazy_Tick;
				break;
			case MODE_HARD:
				start=CSONG[SelectCurrent].Hard_Start;
				start2=CSONG[SelectCurrent].Hard_Start2;
				start3=CSONG[SelectCurrent].Hard_Start3;
				tick=CSONG[SelectCurrent].Hard_Tick;
				break;
			case MODE_EASY:
				start=CSONG[SelectCurrent].Easy_Start;
				start2=CSONG[SelectCurrent].Easy_Start2;
				start3=CSONG[SelectCurrent].Easy_Start3;
				tick=CSONG[SelectCurrent].Easy_Tick;
				break;
			case MODE_DOUBLE:
				start=CSONG[SelectCurrent].Double_Start;
				start2=CSONG[SelectCurrent].Double_Start2;
				start3=CSONG[SelectCurrent].Double_Start3;
				tick=CSONG[SelectCurrent].Double_Tick;
				break;
		}

		strcpy(SongName,CSONG[SelectCurrent].WavName);
		strcpy(SongName2,CSONG[SelectCurrent].MP3Name);
		strcpy(SongName3,CSONG[SelectCurrent].MPGName);
		strcpy(Title,CSONG[SelectCurrent].SongTitle);

		Judgement1p=NONE;
		Judgement2p=NONE;

		if(GameMode==MODE_DOUBLE)ProgramState=DOUBLE;
//		else if(Couple)ProgramState=COUPLE;
		else ProgramState=STAGE1;
		
		if(GameMode==MODE_DOUBLE)
		{
			if(Start1p && Start2p) Start2p=FALSE;
		}
		Selected=0;
		
		if(g_dsSelectSong)g_dsSelectSong->Stop();
		if(IntroFlag){intro->OnMediaStop();delete intro;IntroFlag=FALSE;}
		
		if(access(SongName,04)==0)
		{
			SongFlag=TRUE;
			song=new CMedia;
			song->OpenMediaFile(SongName);
		}
		else if(access(SongName2,04)==0)
		{
			SongFlag=TRUE;
			song=new CMedia;
			song->OpenMediaFile(SongName2);
		}
		else SongFlag=FALSE;

		DDFillSurface(g_pDDSBack, 0); // ????

		First=0;
		Combo1p=0;
		Combo2p=0;

		cPerfect1p=0;
		cGreat1p=0;
		cGood1p=0;
		cBad1p=0;
		cMiss1p=0;
		cMaxCombo1p=0;

		cPerfect2p=0;
		cGreat2p=0;
		cGood2p=0;
		cBad2p=0;
		cMiss2p=0;
		cMaxCombo2p=0;

		dwState=0;
		dwState2=0;

		start1=0;

		PressedKey1p[0]=0;
		PressedKey2p[0]=0;
		SelectCurrent=0;

		return;
		
	}

	g_pDDSBack->BltFast(0,0,SelectBack,NULL,DDBLTFAST_NOCOLORKEY);

	curTimer=timeGetTime();

	int i2;

	i2=(int)(curTimer-startTimer)/1000;
	sprintf(s,"%02d", (40 - i2));
	//sprintf(s, "99");

	if(0>=(40-i2))
	{
		if(Selected==7)SelectCurrent=current,PressedKey1p[0]=3;
		else if(Selected==9)SelectCurrent=CSONG[current].Next, PressedKey1p[0]=3;
		else SelectCurrent=current,PressedKey1p[0]=3;
	}
		
	DisplayNumber(560,8,s);
	
	if(Selected==7)
	{
			Screen.top=50-zoom;
			Screen.bottom=50+DISCSIZE_Y+zoom;
			Screen.left=10-zoom;
			Screen.right=10+DISCSIZE_X+zoom;
	}
	else
	{
		Screen.top=50;
		Screen.bottom=50+DISCSIZE_Y;
		Screen.left=10;
		Screen.right=10+DISCSIZE_X;
	}
	
	if(iMove<0)
	{
		if(iMove<=-640)iMove=0;
		else 
		{
			iMove-=8;

			ClpBlt3(10+iMove,50,CSONG[CSONG[CSONG[current].Prev].Prev].DiskImage, &DiscSize,DDBLTFAST_SRCCOLORKEY);
			ClpBlt3(650+iMove,50,CSONG[current].DiskImage, &DiscSize,DDBLTFAST_SRCCOLORKEY);
		}
	}
	else if(iMove>0)
	{
		if(iMove>=640)iMove=0;
		else
		{
			iMove+=8;
		
			ClpBlt3(-630+iMove,50,CSONG[current].DiskImage, &DiscSize, DDBLTFAST_SRCCOLORKEY);
			ClpBlt3(10+iMove,50,CSONG[CSONG[CSONG[current].Next].Next].DiskImage, &DiscSize, DDBLTFAST_SRCCOLORKEY);
		}
	}
	else if(iMove==0)g_pDDSBack->Blt(&Screen,CSONG[current].DiskImage, &DiscSize, DDBLT_KEYSRC,NULL);
	
	if(Selected==9)
	{
			Screen.top=50-zoom;
			Screen.bottom=50+DISCSIZE_Y+zoom;
			Screen.left=330-zoom;
			Screen.right=330+DISCSIZE_X+zoom;
	}
	else
	{
		Screen.top=50;
		Screen.bottom=50+DISCSIZE_Y;
		Screen.left=330;
		Screen.right=330+DISCSIZE_X;
	}
	if(iMove<0)
	{
		if(iMove<=-640)iMove=0;
		else
		{
			iMove-=8;

			ClpBlt3(330+iMove,50,CSONG[CSONG[CSONG[CSONG[current].Prev].Prev].Next].DiskImage, &DiscSize,DDBLTFAST_SRCCOLORKEY);
			ClpBlt3(970+iMove,50,CSONG[CSONG[current].Next].DiskImage, &DiscSize,DDBLTFAST_SRCCOLORKEY);
		}
	}
	else if(iMove>0)
	{
		if(iMove>=640)iMove=0;
		else
		{
			iMove+=8;
		
			ClpBlt3(-310+iMove,50,CSONG[CSONG[current].Next].DiskImage, &DiscSize, DDBLTFAST_SRCCOLORKEY);
			ClpBlt3(330+iMove,50,CSONG[CSONG[CSONG[CSONG[current].Next].Next].Next].DiskImage, &DiscSize,DDBLTFAST_SRCCOLORKEY);
		}
	}
	else if(iMove==0)g_pDDSBack->Blt(&Screen,CSONG[CSONG[current].Next].DiskImage, &DiscSize, DDBLT_KEYSRC,NULL);

	g_pDDSBack->BltFast(0,250,ShiftLeft,NULL,DDBLTFAST_SRCCOLORKEY);
	g_pDDSBack->BltFast(320,250,ShiftRight,NULL,DDBLTFAST_SRCCOLORKEY);
	
/*	if(PressedKey2p[0]==6)
	{
		switch(GameMode)
		{
			case MODE_EASY:GameMode=MODE_HARD;
				break;
			case MODE_HARD:GameMode=MODE_EASY;
				break;
		}
		PressedKey2p[0]=0;
	}

	else if(PressedKey2p[0]==4)
	{
		switch(GameMode)
		{
			case MODE_EASY:GameMode=MODE_HARD;
				break;
			case MODE_HARD:GameMode=MODE_EASY;
				break;
		}
		PressedKey2p[0]=0;
	} */
/*	switch(GameMode)
	{
		case MODE_EASY:DisplayMessage(200,460,"EASY");break;
		case MODE_HARD:DisplayMessage(200,460,"HARD");break;
	}
	switch(Couple)
	{
		case TRUE:DisplayMessage(100,460,"COUPLE MODE");break;
		case FALSE:DisplayMessage(100,460,"SINGLE MODE");break;
	}
*/	
	if(Selected==7)DisplayMessage(200,300,CSONG[current].SongTitle);
	else if(Selected==9)DisplayMessage(200,300,CSONG[CSONG[current].Next].SongTitle);

	if(bModeMirror1p)DrawMode(0,200,HMODE_MIRROR);
	if(bModeNonstep1p)DrawMode(0,240,HMODE_NONSTEP);
	if(bModeSynchro)DrawMode(0,280,HMODE_SYNCHRO);
	if(bModeUnion1p)DrawMode(0,320,HMODE_UNION);
	if(bModeRandom1p)DrawMode(0,360,HMODE_RANDOM);
	if(bModeVanish1p)DrawMode(0,400,HMODE_VANISH);

	if(HighSpeed1p>1)DrawMode(0,160,HMODE_2X);

	if(bModeMirror2p)DrawMode(600,200,HMODE_MIRROR);
	if(bModeNonstep2p)DrawMode(600,240,HMODE_NONSTEP);
	if(bModeUnion2p)DrawMode(600,320,HMODE_UNION);
	if(bModeRandom2p)DrawMode(600,360,HMODE_RANDOM);
	if(bModeVanish2p)DrawMode(600,400,HMODE_VANISH);

	if(HighSpeed2p>1)DrawMode(600,160,HMODE_2X);

	if(CSONG[current].HaveDouble && iMove==0 )g_pDDSBack->BltFast(0,50, DoubleIcon,NULL, DDBLTFAST_SRCCOLORKEY);
	if(CSONG[CSONG[current].Next].HaveDouble && iMove==0 )g_pDDSBack->BltFast(320,50, DoubleIcon, NULL, DDBLTFAST_SRCCOLORKEY);

	if(CSONG[current].HaveCrazy && iMove==0 )g_pDDSBack->BltFast(0,50, CrazyIcon,NULL, DDBLTFAST_SRCCOLORKEY);
	if(CSONG[CSONG[current].Next].HaveCrazy && iMove==0 )g_pDDSBack->BltFast(320,50, CrazyIcon, NULL, DDBLTFAST_SRCCOLORKEY);

	if(CSONG[current].HaveHard && iMove==0 )g_pDDSBack->BltFast(0,50, HardIcon,NULL, DDBLTFAST_SRCCOLORKEY);
	if(CSONG[CSONG[current].Next].HaveHard && iMove==0 )g_pDDSBack->BltFast(320,50, HardIcon, NULL, DDBLTFAST_SRCCOLORKEY);

	if(CSONG[current].HaveEasy && iMove==0 )g_pDDSBack->BltFast(0,50, EasyIcon,NULL, DDBLTFAST_SRCCOLORKEY);
	if(CSONG[CSONG[current].Next].HaveEasy && iMove==0 )g_pDDSBack->BltFast(320,50, EasyIcon, NULL, DDBLTFAST_SRCCOLORKEY);

/*	int DiffL,DiffR;

	DiffL=0,DiffR=0;
	if(CSONG[current].Double_Diff)DiffL=CSONG[current].Double_Diff;
	else if(CSONG[current].Easy_Diff)DiffL=CSONG[current].Easy_Diff;
	else if(CSONG[current].Hard_Diff)DiffL=CSONG[current].Hard_Diff;
	else if(CSONG[current].Crazy_Diff)DiffL=CSONG[current].Crazy_Diff;

	if(CSONG[CSONG[current].Next].Double_Diff)DiffR=CSONG[CSONG[current].Next].Double_Diff;
	else if(CSONG[CSONG[current].Next].Easy_Diff)DiffR=CSONG[CSONG[current].Next].Easy_Diff;
	else if(CSONG[CSONG[current].Next].Hard_Diff)DiffR=CSONG[CSONG[current].Next].Hard_Diff;
	else if(CSONG[CSONG[current].Next].Crazy_Diff)DiffR=CSONG[CSONG[current].Next].Crazy_Diff;

	if(iMove==0)
	for(i=DiffL;;i--)
	{
		if(i==0)break;
		if(i==1)g_pDDSBack->BltFast(285,145,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==2)g_pDDSBack->BltFast(283,125,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==3)g_pDDSBack->BltFast(283,165,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==4)g_pDDSBack->BltFast(281,105,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==5)g_pDDSBack->BltFast(281,105,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==6)g_pDDSBack->BltFast(279,85,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==7)g_pDDSBack->BltFast(279,185,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
	}

	if(iMove==0)
	for(i=DiffR;;i--)
	{
		if(i==0)break;
		if(i==1)g_pDDSBack->BltFast(330,145,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==2)g_pDDSBack->BltFast(332,125,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==3)g_pDDSBack->BltFast(332,165,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==4)g_pDDSBack->BltFast(334,105,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==5)g_pDDSBack->BltFast(334,105,Diff,NULL,DDBLTFAST_SRCCOLORKEY);

		if(i==6)g_pDDSBack->BltFast(336,85,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
		if(i==7)g_pDDSBack->BltFast(336,185,Diff,NULL,DDBLTFAST_SRCCOLORKEY);
	}
*/
//	DrawMode(0,0,HMODE_UNION);


	g_pDDSBack->BltFast(210,450,CFont, &lRect, DDBLTFAST_SRCCOLORKEY);

	if(Start1p)
	{
		if(a==0)
		{
			a++;
			if(Start1p && Start2p)Couple=TRUE;
			else Couple=FALSE;
		}
	}
	if(Start2p)
	{
		if(b==0)
		{
			b++;
			if(Start1p && Start2p)Couple=TRUE;
			else Couple=FALSE;
		}
	}

	if(Start1p==FALSE)
	{
		lRect.top=0;
		lRect.left=0;
		lRect.right=220;
		lRect.bottom=23;

		TransAlphaImproved(CFont, g_pDDSBack, 10, 450, lRect, ALPHA, CKey_CFont, 16);
	}
	if(Start2p==FALSE)//DisplayMessageC(320,480-20,"PRESS CENTER STEP");
	{
		lRect.top=0;
		lRect.left=0;
		lRect.right=220;
		lRect.bottom=23;

		TransAlphaImproved(CFont, g_pDDSBack, 410, 450, lRect, ALPHA, CKey_CFont, 16);
	}

	ALPHA += inc;
	if (ALPHA > 256)
	{
		ALPHA = 256;
		inc = -10;
	}
	else if (ALPHA < 0)
	{
		ALPHA = 0;
		inc = 10;
	}

	Flipp();

}