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'; } }
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(); }
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; }
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
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; } } }