Example #1
0
void SAV_CreateSaveHead(void)
{
	int	_times = ESC_GetFlag( _TIME );
	int	_days  = ESC_GetFlag( _DAY  );
	int	_month = ESC_GetFlag( _MONTH );

	SaveStruct.save_head.ver_no = 1;		
	SaveStruct.save_head.sin_no = (_month<<16) | (_days<<8) | _times;	
	GetLocalTime( &SaveStruct.save_head.sys_time );

	DSP_SetGraph( GRP_WORK, BMP_CAP, 0, ON, CHK_HOKAN );
	DSP_SetGraphPosZoom( GRP_WORK, 0, 0, 80, 60, 0, 0, 800, 600 );
	DSP_CreateBmp( BMP_WORK, BMP_FULL, 80, 60 );
	DSP_SetGraphTarget( GRP_WORK, BMP_WORK, MainWindow.draw_mode2 );
	BMP_F	*bmp_f = (BMP_F *)DSP_GetBmp( BMP_WORK );

	CopyMemory( SaveStruct.save_head.thumbnail, bmp_f->buf, 80*60*sizeof(RGB24) );
	DSP_ResetGraph( GRP_WORK );
	DSP_ReleaseBmp( BMP_WORK );

	
	char	*buf = SaveStruct.save_head.message;
	char	buf2[1024];
	int		k=0;
	int		j=0;
	
	ZeroMemory( &SaveStruct.save_head.message, 32 );
	ZeroMemory( buf2, 1024 );
	DSP_GetTextDispStr( TXT_WINDOW, buf2 );
	if(MapStep){
		strcpy( buf, " MAP選択" );
	}else{
		strncpy( buf, buf2, 18 );
	}
	while( buf[k] && buf[k]!='\n' ){
		if( (0x00<=buf[k] && buf[k]<0x80) || (0xa0<=buf[k] && buf[k]<0xe0) ) {
			if(k>=28) { j=1; break; }
			else	  { k++; }
		}else{
			if(k>=27) { j=1; break; }
			else	  { k+=2; }
		}
	}
	if(j){
		buf[k  ]='・';
		buf[k+1]='・';
		buf[k+2]='\0';
	}else{
		buf[k]='\0';
	}
	
}
Example #2
0
void SAV_Load( int load_no )
{
	char	fname[256];

	if(load_no>=0) { wsprintf( fname, "save_%02d.sav", load_no ); }
	else		   { wsprintf( fname, "save___.sav" );			  }
	if( !STD_ReadFile( fname, (char*)&SaveStruct, sizeof(SaveStruct)) ){
		DebugBox( NULL, "ファイルが開けないにょ[%s]", fname );
	}

	SAV_LoadScript();
	CopyMemory( ESC_FlagBuf, SaveStruct.ESC_FlagBuf, sizeof(int)*ESC_FLAG_MAX ); 

	DefaultCharName = ESC_GetFlag( _DEFAULT_NAME );

			AVG_SetLoadData( SaveStruct.sdata );
	AVG_LoadWindow();
}
Example #3
0
BOOL MapCharThinkMagicTelepo( int i, int mno, int &rate_bak, int &magic_no, int &tno, int &tx, int &ty, int reload )
{
	int	k;
	int	x,y;

	int		rate=0;
	float	px = CharControl[i].px;
	float	py = CharControl[i].py;
	int		cno = CharControl[i].cno;

	float	range = GetMagicRange( mno, cno );
	float	scope = GetMagicScope( mno, cno );

	for( k=0 ; k<CHAR_CONTROL_MAX ; k++ ){
		if(CharControl[k].flag && !CharParam[CharControl[k].cno].did){
			rate=0;
			if( pow(px-CharControl[k].px,2)+pow(py-CharControl[k].py,2) < pow(range,2) || (reload && tno==k) ){
				if(CharParam[CharControl[i].cno].unit==CharParam[CharControl[k].cno].unit){
					rate=0;
				}else{
					if(ESC_GetFlag(3)>3){
						rate=99999-CharParam[CharControl[k].cno].GetDef();
					}else{
						rate=CharParam[CharControl[k].cno].GetDef();
					}
				}

				if(rate_bak<rate){
					rate_bak = rate;
					magic_no = mno;
					tno = k;
					tx = 0;
					ty = 0;
				}
			}
		}
	}
	return magic_no!=-1;
}
Example #4
0
LRESULT APIENTRY MainWndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
	int				i;
	PAINTSTRUCT		ps;

	switch( message ){
	case WM_CREATE:
		InitCommonControls();
		break;
	case WM_MOUSEWHEEL:
		sysInf.zDelta = (short) HIWORD(wParam);
		break;
    case WM_DESTROY:
	case WM_QUIT:
	case WM_CLOSE:
#ifdef _MASTER
		if(IDYES==MessageBox(sysInf.hWnd,"鎖−クサリ− を終了します。よろしいですか?","終了確認",MB_YESNO)){
			sysInf.bGameEnd = on;
		}
#else
		sysInf.bGameEnd = on;
#endif
		return 0;
	case WM_ACTIVATE:
		for(i=0;i<g_iDIDeviceNum;i++){
			if(LOWORD(wParam) == WA_INACTIVE){
				g_pDIDevice[i]->Unacquire();
			}else{
				g_pDIDevice[i]->Acquire();
				g_pDIDevice[i]->Poll();
			}
		}
		sysInf.bIsActive = LOWORD(wParam) ? TRUE : FALSE;
		if(sysInf.bIsActive)myOutputDebugString("ActivateHandle: Active\n");
		else myOutputDebugString("ActivateHandle: Non Active\n");
		if(sysInf.bIsActive)clearPadState();
		break;
	case WM_KEYDOWN:
#ifndef _MASTER
		switch(wParam){
		  case (VK_F2):
			sysInf.bInfo = !sysInf.bInfo;
			if(!sysInf.bInfo && sysInf.hDebugWnd){
				SendMessage(sysInf.hDebugWnd,WM_CLOSE,0,0);
			}else if(sysInf.bInfo && NULL==sysInf.hDebugWnd){
				sysInf.hDebugWnd = CreateDialog(
					sysInf.hInstance, MAKEINTRESOURCE(IDD_DEBUGWND), sysInf.hWnd, (DLGPROC)DebugDlgProc);
			}
			break;
		}
#endif
		break;
	case WM_COMMAND:
		switch( LOWORD(wParam) ){
		  case ID_END:
			sysInf.bGameEnd = on;
			return 0;
		  case ID_MYAPP_EXIT:
#ifdef _MASTER
			if(IDYES==MessageBox(sysInf.hWnd,"鎖−クサリ− を終了します。よろしいですか?","終了確認",MB_YESNO)){
				sysInf.bGameEnd = on;
			}
#else
			sysInf.bGameEnd = on;
#endif
			return 0;
		  case ID_DISPCHANGE:
			if(0==sysInf.full_screen){
				if(CheckOSw2k()){
					SendMessage(hWnd,WM_COMMAND,ID_SUBMENU,0);
				}else{
					SendMessage(hWnd,WM_COMMAND,ID_DISPFULL,0);
				}
			}else{
				SendMessage(hWnd,WM_COMMAND,ID_DISPWINDOW,0);
			}
			break;
		  case ID_DISPFULL:
			if(lpMovie)	return 0;
			ScreenChange(1,0);
			EnableMenuItem( sysInf.hMenu,ID_DISPFULL,   MF_GRAYED  );
			CheckMenuItem( sysInf.hMenu, ID_DISPFULL,   MF_CHECKED );	
			EnableMenuItem( sysInf.hMenu,ID_DISPWINDOW, MF_ENABLED );
			CheckMenuItem( sysInf.hMenu, ID_DISPWINDOW, MF_UNCHECKED );
			break;
		  case ID_DISPWINDOW:
			if(lpMovie)	return 0;
			ScreenChange(0,0);
			if(CheckOSw2k()){
				for(i=0;i<DispFreqMax;i++){
					EnableMenuItem( sysInf.hMenu, ID_SUBMENU+i,  MF_ENABLED  );
					CheckMenuItem( sysInf.hMenu, ID_SUBMENU+i,   MF_UNCHECKED );
				}
			}else{
				EnableMenuItem( sysInf.hMenu, ID_DISPFULL,  MF_ENABLED );
				CheckMenuItem( sysInf.hMenu, ID_DISPFULL,   MF_UNCHECKED );
			}
			EnableMenuItem( sysInf.hMenu, ID_DISPWINDOW, MF_GRAYED  );
			CheckMenuItem( sysInf.hMenu, ID_DISPWINDOW,  MF_CHECKED   );
			break;
		  case ID_SUBMENU:		case ID_SUBMENU+1:	case ID_SUBMENU+2:	case ID_SUBMENU+3:
		  case ID_SUBMENU+4:	case ID_SUBMENU+5:	case ID_SUBMENU+6:	case ID_SUBMENU+7:
			if(lpMovie)	return 0;
			ScreenChange( wParam-ID_SUBMENU+1 ,TRUE);
			for(i=0;i<DispFreqMax;i++){
				EnableMenuItem( sysInf.hMenu, ID_SUBMENU+i,  MF_ENABLED  );
				CheckMenuItem( sysInf.hMenu, ID_SUBMENU+i,   MF_UNCHECKED );
			}
			EnableMenuItem( sysInf.hMenu, LOWORD(wParam),  MF_GRAYED  );
			CheckMenuItem( sysInf.hMenu, LOWORD(wParam),   MF_CHECKED );
			EnableMenuItem( sysInf.hMenu, ID_DISPWINDOW, MF_ENABLED );
			CheckMenuItem( sysInf.hMenu, ID_DISPWINDOW,  MF_UNCHECKED );
			break;
		  case ID_AUTOREAD:
			msgWnd.toggleAutoRead();
			break;
		  case ID_READSKIP:
			msgWnd.toggleMessageSkip();
			break;
		  case ID_UPDATE:
			ShellExecute( sysInf.hWnd, NULL, "http://leaf.aquaplus.co.jp", NULL, NULL, SW_SHOWNORMAL );
			break;
		  case ID_VER:
			DialogBox( sysInf.hInstance, MAKEINTRESOURCE(IDD_ABOUTDIALOG), sysInf.hWnd, AboutDialogBoxProc );
			break;
		  case ID_SYSTEMINFO:
			DialogBox( sysInf.hInstance, MAKEINTRESOURCE(IDD_INFODIALOG), sysInf.hWnd, InfoDialogBoxProc );
			break;
		  case ID_CONFIG:
			if(NULL==optionWnd)	optionWnd = new OptionMode;
			break;
#ifndef _MASTER
		  case ID_FLAGEDIT:
			DialogBox( sysInf.hInstance, MAKEINTRESOURCE(IDD_FLAGEDIT), sysInf.hWnd, FlagDialogBoxProc );
			break;
#endif
		  case ID_LOADEXEC:
			if(ESC_GetFlag(_セーブロード無効))break;
			switch(sysInf.execMode){
			  case event_exec_mode: case select_exec_mode: case opening_mode:
				if(NULL==EXEC_LangBuf){
					EXEC_LangBuf  = (char *)&LangData.LangBuf;
					EXEC_LangInfo = &LangData;
				}
				if(NULL==saveWnd)saveWnd = new SaveWnd(load_mode);
				break;
			}
			break;
		  case ID_SAVEEXEC:
			if(ESC_GetFlag(_セーブロード無効))break;
			if(NULL==EXEC_LangBuf)break;
			switch(sysInf.execMode){
			  case event_exec_mode: case select_exec_mode:
				if(NULL==saveWnd)saveWnd = new SaveWnd(save_mode);
				break;
			}
			break;
		  case ID_BACKTITLE:
			ReturnTitile(TRUE);
			break;
		  case ID_BACKSELECT:
			SAV_Load( 98 );
			break;
		  case ID_MOVIEHI:
			sysInf.movieQuality = 2;
			CheckMenuItem( sysInf.hMenu, ID_MOVIEHI,   MF_CHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIEMID,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIELOW,  MF_UNCHECKED );
			break;
		  case ID_MOVIEMID:
			sysInf.movieQuality = 1;
			CheckMenuItem( sysInf.hMenu, ID_MOVIEHI,   MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIEMID,  MF_CHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIELOW,  MF_UNCHECKED );
			break;
		  case ID_MOVIELOW:
			sysInf.movieQuality = 0;
			CheckMenuItem( sysInf.hMenu, ID_MOVIEHI,   MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIEMID,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_MOVIELOW,  MF_CHECKED );
			break;
		  case ID_NOUSEOVERLAY:
			sysInf.nouseOverlay = !sysInf.nouseOverlay;
			if(sysInf.nouseOverlay){
				CheckMenuItem( sysInf.hMenu, ID_NOUSEOVERLAY,  MF_CHECKED );
			}else{
				CheckMenuItem( sysInf.hMenu, ID_NOUSEOVERLAY,  MF_UNCHECKED );
			}
			break;
		  case ID_FPS60:
			sysInf.setFPS = 2;
			CheckMenuItem( sysInf.hMenu, ID_FPS60,  MF_CHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS30,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS20,  MF_UNCHECKED );
			break;
		  case ID_FPS30:
			sysInf.setFPS = 1;
			CheckMenuItem( sysInf.hMenu, ID_FPS60,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS30,  MF_CHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS20,  MF_UNCHECKED );
			break;
		  case ID_FPS20:
			sysInf.setFPS = 0;
			CheckMenuItem( sysInf.hMenu, ID_FPS60,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS30,  MF_UNCHECKED );
			CheckMenuItem( sysInf.hMenu, ID_FPS20,  MF_CHECKED );
			break;
		}
		break;
	case WM_SYSCOMMAND:
		if(sysInf.full_screen){
			switch (wParam) {
				case SC_KEYMENU :
					return 0;
			}
		}else{
			switch(wParam & 0xfff0){
			  case SC_MAXIMIZE:
				if(lpMovie)	return 0;
				ScreenChange(1,0);
				EnableMenuItem( sysInf.hMenu,ID_DISPFULL,   MF_GRAYED  );
				CheckMenuItem( sysInf.hMenu, ID_DISPFULL,   MF_CHECKED );
				EnableMenuItem( sysInf.hMenu,ID_DISPWINDOW, MF_ENABLED );
				CheckMenuItem( sysInf.hMenu, ID_DISPWINDOW, MF_UNCHECKED );
				return 0;
			}
		}
		break;
	case WM_DISPLAYCHANGE:
		if(!sysInf.bDisplayChange)break;
		SetTimer(sysInf.hWnd, 1, 500, NULL);	
		break;
	case WM_TIMER:
		if(!sysInf.bDisplayChange || 1!=wParam)break;
		KillTimer(sysInf.hWnd, wParam);
		if(0==sysInf.full_screen){
			MoveWindow(sysInf.hWnd,
				(GetSystemMetrics(SM_CXSCREEN)-sysInf.ScreenW)/2,(GetSystemMetrics(SM_CYSCREEN)-sysInf.ScreenH)/2,
				sysInf.ScreenW +GetSystemMetrics(SM_CXDLGFRAME)*2,
				sysInf.ScreenH +GetSystemMetrics(SM_CYDLGFRAME)*2 +GetSystemMetrics(SM_CYBORDER)+GetSystemMetrics(SM_CYSIZE) +GetSystemMetrics(SM_CYMENU),
				TRUE);
		}else{
			MoveWindow(sysInf.hWnd,
				0, 0, sysInf.ScreenW, sysInf.ScreenH, TRUE);
			if(NULL==sysInf.hMenuWnd){
				sysInf.hMenuWnd = CreateWindow(className,"menuWnd",WS_POPUP,
					0,0,
					WIN_SIZEX,GetSystemMetrics(SM_CYMENUSIZE),sysInf.hWnd,sysInf.hMenu,sysInf.hInstance,NULL);
			}
		}
		sysInf.bDisplayChange = FALSE;
		break;
	case WM_PAINT:
		if(lpMovie){
			myOutputDebugString("movie WM_PAINT\n");
			if(lpMovie->forccNum<3){
				BeginPaint( sysInf.hWnd, &ps );
				EndPaint( sysInf.hWnd, &ps );
			}
		}else{
			BeginPaint( sysInf.hWnd, &ps );
			BitBlt( ps.hdc, 0, 0, WIN_SIZEX, WIN_SIZEY, g_DibInf.memDC, 0, 0, SRCCOPY );
			EndPaint( sysInf.hWnd, &ps );
		}
		break;
	case WM_SETCURSOR:
	default:
		break;
    }
	return DefWindowProc(hWnd, message, wParam, lParam);

} // MainWndProc
Example #5
0
void RenewMapCharThink( void )
{
	int	i,j,k, mno;
	int	x,y;

	i = ESC_GetFlag(3);
	if(i==0){
		ESC_SetFlag(3,3);
	}


	for(i=0;i<CHAR_CONTROL_MAX;i++){
		if( CharControl[i].step==CHAR_STEP_MAGIC_WAIT || CharControl[i].step==CHAR_STEP_TECHNIC ){
			return ;
		}
	}


	for(i=0;i<CHAR_CONTROL_MAX;i++){
		int		rate_bak=0,magic_no=-1;
		int		rate=0;
		int		tno=0, tx=0, ty=0;
		float	px = CharControl[i].px;
		float	py = CharControl[i].py;
		int		cno = CharControl[i].cno;

		if( !CharControl[i].flag ) continue;
		if( !CharParam[CharControl[i].cno].flag ) continue;
		if( !CharThink[CharControl[i].cno].flag ) continue;

		if( CharParam[CharControl[i].cno].did ) continue;

		if( CharControl[i].action==CHAR_ACTION_COMMAND ) continue;

		if(CharControl[i].dmg){
			if( CharThink[CharControl[i].cno].move==MOVE_THINK_SEARCH ){
				CharThink[CharControl[i].cno].move=MOVE_THINK_ATACK;
			}
		}
		CharThink[CharControl[i].cno].heito_cnt++;

		if( CharControl[i].action==CHAR_ACTION_TECHNIC ) continue;

		int	kt_interval=60*10;
	if( CharControl[i].step!=CHAR_STEP_ATACK2){
		switch(CharThink[CharControl[i].cno].action){
		case ACTION_THINK_SHOT_TEL:
			if( CharControl[i].step!=CHAR_STEP_MAGIC_END ){
				RenewMapCharThinkMagicTelepo(i);
			}else{
				if( ESC_GetFlag(3)<3 ){
					CharThink[CharControl[i].cno].action=ACTION_THINK_ATACK;
				}else{
					CharThink[CharControl[i].cno].action=ACTION_THINK_SHOT;
				}
			}
			break;
		case ACTION_THINK_ATACK:	
			break;
		case ACTION_THINK_SHOT:		
			if( ESC_GetFlag(3)<3 ){
				CharThink[CharControl[i].cno].action=ACTION_THINK_ATACK;
			}
			break;
		case ACTION_THINK_KNIGHT:	
			
			if(CharParam[CharControl[i].cno].job==29){
				kt_interval=60*15;
			}
			switch( CharThink[CharControl[i].cno].mode ){
			case 0:
				CharThink[CharControl[i].cno].mode_cnt++;
				if( CharThink[CharControl[i].cno].mode_cnt>kt_interval ){
					CharThink[CharControl[i].cno].mode=1;
				}
				break;
			case 1:
				j = RenewMapCharThinkMagicHeal(i);
				if( j==-1 ){
					j = RenewMapCharThinkMagicAtack(i);
					if( !(j==-1) ){
						CharThink[CharControl[i].cno].mode_cnt=0;
						CharThink[CharControl[i].cno].mode=3;
					}
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=2;
				}
				break;
			case 2:
				if( CharControl[i].step!=CHAR_STEP_MAGIC_END ){
					RenewMapCharThinkMagicHeal(i);
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=0;
				}
				break;
			case 3:
				if( CharControl[i].step!=CHAR_STEP_MAGIC_END && CharControl[i].step!=CHAR_STEP_TECHNIC_WAIT ){
					RenewMapCharThinkMagicAtack(i);
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=0;
				}
				break;
			}
			break;
		case ACTION_THINK_MAGIC:	
			RenewMapCharThinkMagicAtack(i);
			break;
		case ACTION_THINK_HEAL:		
			RenewMapCharThinkMagicHeal(i);
			break;
		case ACTION_THINK_HEAL_MAGIC:	
			

			switch( CharThink[CharControl[i].cno].mode ){
			case 0:
				CharThink[CharControl[i].cno].mode=1;
				break;
			case 1:
				j = RenewMapCharThinkMagicHeal(i);
				if( j==-1 ){
					j = RenewMapCharThinkMagicAtack(i,TRUE);
					if( !(j==-1) ){
						CharThink[CharControl[i].cno].mode_cnt=0;
						CharThink[CharControl[i].cno].mode=3;
					}
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=2;
				}
				break;
			case 2:
				if( CharControl[i].step!=CHAR_STEP_MAGIC_END ){
					RenewMapCharThinkMagicHeal(i);
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=0;
				}
				break;
			case 3:
				if( CharControl[i].step!=CHAR_STEP_MAGIC_END ){
					RenewMapCharThinkMagicAtack(i,TRUE);
				}else{
					CharThink[CharControl[i].cno].mode_cnt=0;
					CharThink[CharControl[i].cno].mode=0;
				}
				break;
			}
			break;
		}
	}
		float	range = 4096.0f;
		int		atack_no=-1;
		float	target_range;

		if(CharParam[CharControl[i].cno].job==87) continue; 
		if(CharParam[CharControl[i].cno].job==88) continue;	

		if( CharControl[i].action==CHAR_ACTION_MAGIC ) continue;
		if( CharControl[i].action==CHAR_ACTION_TECHNIC ) return ;


		int	self_unit;
		if( CharParam[CharControl[i].cno].CheckStatusEffct(STATUS_HACK) ){
			self_unit = !CharParam[CharControl[i].cno].unit;
		}else{
			self_unit = CharParam[CharControl[i].cno].unit;
		}


		if(CharThink[CharControl[i].cno].move==MOVE_THINK_SURPRISE){
			if( ESC_GetFlag(3)<3 ){
				CharThink[CharControl[i].cno].move=MOVE_THINK_ATACK;
			}
		}

		switch(CharThink[CharControl[i].cno].move){
		case MOVE_THINK_SURPRISE:
			if( GlobalCount%max(1,CharControl[i].serch_wait)==0 ){

				if(CharThink[CharControl[i].cno].heito_tno!=-1){
					int	heito_tno = CharThink[CharControl[i].cno].heito_tno;

					if( CharParam[CharControl[heito_tno].cno].did ){
						CharThink[CharControl[i].cno].heito_tno = -1;
						CharThink[CharControl[i].cno].heito_cnt = 0;
					}
					if( !CheckMapCharAtack( i, heito_tno ) ) continue;

					target_range = (float)sqrt( pow(CharControl[i].px-CharControl[heito_tno].px,2)+pow(CharControl[i].py-CharControl[heito_tno].py,2) );
					if( target_range < range ){
						range = target_range;
						atack_no=heito_tno;
					}
					if(CharThink[CharControl[i].cno].heito_cnt>60*10){
						CharThink[CharControl[i].cno].heito_tno = -1;
						CharThink[CharControl[i].cno].heito_cnt = 0;
					}
				}else{
					range=0;
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;

						target_range = 1000*AtackNormal( i, j, TRUE ) / (CharParam[CharControl[j].cno].php+1);
						if( target_range > range ){
							range = target_range;
							atack_no=j;
						}
					}
				}
				if(atack_no==-1){
					SetMapCharTartgetAtack( i, -1 );
					break;
				}

				SetMapCharTartgetAtack( i, atack_no );
				target_range = (float)sqrt( pow(CharControl[i].px-CharControl[CharControl[i].tcno].px,2) + pow(CharControl[i].py-CharControl[CharControl[i].tcno].py,2) );
				CharControl[i].serch_wait=(int)target_range/16;
			}
			break;

		case MOVE_THINK_ATACK:		
			if( GlobalCount%max(1,CharControl[i].serch_wait)==0 ){

				if(CharThink[CharControl[i].cno].heito_tno!=-1){
					int	heito_tno = CharThink[CharControl[i].cno].heito_tno;

					if( CharParam[CharControl[heito_tno].cno].did ){
						CharThink[CharControl[i].cno].heito_tno = -1;
						CharThink[CharControl[i].cno].heito_cnt = 0;
					}
					if( !CheckMapCharAtack( i, heito_tno ) ) continue;

					target_range = (float)sqrt( pow(CharControl[i].px-CharControl[heito_tno].px,2)+pow(CharControl[i].py-CharControl[heito_tno].py,2) );
					if( target_range < range ){
						range = target_range;
						atack_no=heito_tno;
					}
					if(CharThink[CharControl[i].cno].heito_cnt>60*10){
						CharThink[CharControl[i].cno].heito_tno = -1;
						CharThink[CharControl[i].cno].heito_cnt = 0;
					}
				}else{
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;
						if( !CheckMapCharAtack( i, j ) ) continue;

						target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
						if( target_range < range ){
							range = target_range;
							atack_no=j;
						}
					}
					if(CharThink[CharControl[i].cno].action==ACTION_THINK_SHOT){
						range=0;
						for(j=0;j<CHAR_CONTROL_MAX;j++){
							if( !CharControl[j].flag ) continue;
							if( i==j ) continue;
							if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
							if( CharParam[CharControl[j].cno].did ) continue;

							target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
							if(CharParam[CharControl[i].cno].GetRange() > target_range ){
								target_range = 1000*AtackNormal( i, j, TRUE ) / (CharParam[CharControl[j].cno].php+1);
								if( target_range > range ){
									range = target_range;
									atack_no=j;
								}
							}
						}
					}
				}
				if(atack_no==-1){
					SetMapCharTartgetAtack( i, -1 );
					break;
				}

				SetMapCharTartgetAtack( i, atack_no );
				target_range = (float)sqrt( pow(CharControl[i].px-CharControl[CharControl[i].tcno].px,2) + pow(CharControl[i].py-CharControl[CharControl[i].tcno].py,2) );
				CharControl[i].serch_wait=(int)target_range/16;
			}
			break;
		case MOVE_THINK_SEARCH:		
		case MOVE_THINK_DEFENSE:	
if(appData.debug_mouse!=-1){
	if(KeyCond.btn.s){
		GD_SetGraphCircle( GRP_MAP_MOVE+i, 64, TRUE, LAY_EFFECT+2, TRUE );

		GD_SetGraphColorNo( GRP_MAP_MOVE+i, 0,   0, 0,   0, 0 );
		GD_SetGraphColorNo( GRP_MAP_MOVE+i, 1, 64, 12, 128, 22 );

		if( CharThink[CharControl[i].cno].ty<0 ){
			float	px = (CharControl[i].px-MapControl.px)*MapControl.zoom;
			float	py = (CharControl[i].py-MapControl.py)*MapControl.zoom;
			range = CharThink[CharControl[i].cno].range;

			GD_SetGraphDstRect( GRP_MAP_MOVE+i, (float)(px - range), (float)(py - range), (float)(range*2), (float)(range*2) );
			GD_SetGraphZoom( GRP_MAP_MOVE+i, MapControl.zoom );
			GD_SetGraphCenter( GRP_MAP_MOVE+i, px, py );
		}else{
			float	px = (CharThink[CharControl[i].cno].tx-MapControl.px)*MapControl.zoom;
			float	py = (CharThink[CharControl[i].cno].ty-MapControl.py)*MapControl.zoom;
			range = CharThink[CharControl[i].cno].range;

			GD_SetGraphDstRect( GRP_MAP_MOVE+i, (float)(px - range), (float)(py - range), (float)(range*2), (float)(range*2) );
			GD_SetGraphZoom( GRP_MAP_MOVE+i, MapControl.zoom );
			GD_SetGraphCenter( GRP_MAP_MOVE+i, px, py );
		}
	}
}

			if( GlobalCount%max(1,CharControl[i].serch_wait)==0 ){
				range = 4096.0f;
				for(j=0;j<CHAR_CONTROL_MAX;j++){
					if( !CharControl[j].flag ) continue;
					if( i==j ) continue;
					if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
					if( CharParam[CharControl[j].cno].did ) continue;
					if( !CheckMapCharAtack( i, j ) ) continue;

					target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
					if( target_range < range ){
						range = target_range;
						atack_no=j;
					}
					if( CharThink[CharControl[i].cno].ty<0 ){
					}else{
						target_range = (float)sqrt( pow(CharThink[CharControl[i].cno].tx-CharControl[j].px,2)+pow(CharThink[CharControl[i].cno].ty-CharControl[j].py,2) );
						if( target_range < range ){
							range = target_range;
							atack_no=j;
						}
					}
				}
				if(range>CharThink[CharControl[i].cno].range){
					SetMapCharTartgetAtack( i, -1 );
					break;
				}
				if(CharThink[CharControl[i].cno].action==ACTION_THINK_SHOT){
					range=0;
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;

						target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
						if(CharParam[CharControl[i].cno].GetRange() > target_range ){
							target_range = 1000*AtackNormal( i, j, TRUE ) / (CharParam[CharControl[j].cno].php+1);
							if( target_range > range ){
								range = target_range;
								atack_no=j;
							}
						}
					}
				}else if( CharThink[CharControl[i].cno].ty>=0 ){
					range = 4096.0f;
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;

						target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
						if( target_range < range ){
							range = target_range;
							atack_no=j;
						}
					}
				}
				if(atack_no==-1){
					SetMapCharTartgetAtack( i, -1 );
					break;
				}




				SetMapCharTartgetAtack( i, atack_no );
				target_range = (float)sqrt( pow(CharControl[i].px-CharControl[CharControl[i].tcno].px,2) + pow(CharControl[i].py-CharControl[CharControl[i].tcno].py,2) );
				CharControl[i].serch_wait=(int)target_range/16;
			}
			break;
		case MOVE_THINK_NO_MOVE:	
			if( GlobalCount%max(1,CharControl[i].serch_wait)==0 ){
				if(CharThink[CharControl[i].cno].action==ACTION_THINK_SHOT){
					range=0;
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;

						target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
						if(CharParam[CharControl[i].cno].GetRange() > target_range ){
							target_range = 1000*AtackNormal( i, j, TRUE ) / (CharParam[CharControl[j].cno].php+1);
							if( target_range > range ){
								range = target_range;
								atack_no=j;
							}
						}
					}
				}else{
					for(j=0;j<CHAR_CONTROL_MAX;j++){
						if( !CharControl[j].flag ) continue;
						if( i==j ) continue;
						if( CharParam[CharControl[j].cno].unit == self_unit ) continue;
						if( CharParam[CharControl[j].cno].did ) continue;

						target_range = (float)sqrt( pow(CharControl[i].px-CharControl[j].px,2)+pow(CharControl[i].py-CharControl[j].py,2) );
						if(CharParam[CharControl[i].cno].GetRange() > target_range ){
							if( target_range < range ){
								range = target_range;
								atack_no=j;
							}
						}
					}
				}
				if(atack_no==-1){
					SetMapCharTartgetAtack( i, -1 );
					break;
				}

				target_range = (float)sqrt( pow(CharControl[i].px-CharControl[CharControl[i].tcno].px,2) + pow(CharControl[i].py-CharControl[CharControl[i].tcno].py,2) );
				SetMapCharTartgetAtack( i, atack_no );
				CharControl[i].serch_wait=(int)target_range/16;
			}
			CharControl[cno].tcnt=0;

			break;
		case MOVE_THINK_NO_MOVE2:	
			break;
		case MOVE_THINK_SUPPORT:	

			switch(CharThink[CharControl[i].cno].action){
			case ACTION_THINK_MAGIC:	SetMapCharTartgetSuport( i, 160 );	break;
			default:
			case ACTION_THINK_HEAL:		SetMapCharTartgetSuport( i, 224 );	break;
			}
			break;
		}
	}
}