diff --git a/desmume/src/windows/main.c b/desmume/src/windows/main.c index 950894e2e..2b9356bab 100644 --- a/desmume/src/windows/main.c +++ b/desmume/src/windows/main.c @@ -91,6 +91,9 @@ SoundInterface_struct *SNDCoreList[] = { NULL }; +int autoframeskipenab=1; +int frameskiprate=0; + LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -102,7 +105,6 @@ DWORD WINAPI run( LPVOID lpParameter) int wait=0; u64 freq; u64 OneFrameTime; - int autoframeskipenab=1; int framestoskip=0; int framesskipped=0; int skipnextframe=0; @@ -215,6 +217,11 @@ DWORD WINAPI run( LPVOID lpParameter) onesecondticks += diffticks; lastticks = curticks; } + else + { + if (framestoskip < 1) + framestoskip = frameskiprate + 1; + } CWindow_RefreshALL(); Sleep(0); @@ -296,6 +303,21 @@ int WINAPI WinMain (HINSTANCE hThisInstance, NDS_Init(); + GetPrivateProfileString("Video", "FrameSkip", "AUTO", text, 80, IniName); + + if (strcmp(text, "AUTO") == 0) + { + autoframeskipenab=1; + frameskiprate=0; + CheckMenuItem(menu, IDC_FRAMESKIPAUTO, MF_BYCOMMAND | MF_CHECKED); + } + else + { + autoframeskipenab=0; + frameskiprate=atoi(text); + CheckMenuItem(menu, frameskiprate + IDC_FRAMESKIP0, MF_BYCOMMAND | MF_CHECKED); + } + sndcoretype = GetPrivateProfileInt("Sound","SoundCore", SNDCORE_DIRECTX, IniName); sndbuffersize = GetPrivateProfileInt("Sound","SoundBufferSize", 735 * 4, IniName); @@ -989,6 +1011,46 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM } return 0; + case IDC_FRAMESKIPAUTO: + case IDC_FRAMESKIP0: + case IDC_FRAMESKIP1: + case IDC_FRAMESKIP2: + case IDC_FRAMESKIP3: + case IDC_FRAMESKIP4: + case IDC_FRAMESKIP5: + case IDC_FRAMESKIP6: + case IDC_FRAMESKIP7: + case IDC_FRAMESKIP8: + case IDC_FRAMESKIP9: + { + if(LOWORD(wParam) == IDC_FRAMESKIPAUTO) + { + autoframeskipenab = 1; + WritePrivateProfileString("Video", "FrameSkip", "AUTO", IniName); + } + else + { + char text[80]; + autoframeskipenab = 0; + frameskiprate = LOWORD(wParam) - IDC_FRAMESKIP0; + sprintf(text, "%d", frameskiprate); + WritePrivateProfileString("Video", "FrameSkip", text, IniName); + } + + CheckMenuItem(menu, IDC_FRAMESKIPAUTO, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP0, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP1, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP2, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP3, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP4, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP5, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP6, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP7, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP8, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, IDC_FRAMESKIP9, MF_BYCOMMAND | MF_UNCHECKED); + CheckMenuItem(menu, LOWORD(wParam), MF_BYCOMMAND | MF_CHECKED); + } + return 0; case IDM_WEBSITE: ShellExecute(NULL, "open", "http://desmume.sourceforge.net", NULL, NULL, SW_SHOWNORMAL); return 0; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 7a508c3af..7943726e0 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -119,6 +119,18 @@ void refreshAll(); #define IDC_SAVETYPE5 186 #define IDC_SAVETYPE6 187 +#define IDC_FRAMESKIPAUTO 190 +#define IDC_FRAMESKIP0 191 +#define IDC_FRAMESKIP1 192 +#define IDC_FRAMESKIP2 193 +#define IDC_FRAMESKIP3 194 +#define IDC_FRAMESKIP4 195 +#define IDC_FRAMESKIP5 196 +#define IDC_FRAMESKIP6 197 +#define IDC_FRAMESKIP7 198 +#define IDC_FRAMESKIP8 199 +#define IDC_FRAMESKIP9 200 + #define IDD_MEM_VIEWER 301 #define IDC_8_BIT 302 #define IDC_16_BIT 303 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index a96baf50d..e0b5c3583 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -347,6 +347,20 @@ MENU_PRINCIPAL MENU } MENUITEM "Control Config", IDM_CONFIG MENUITEM "Sound Settings", IDM_SOUNDSETTINGS + POPUP "&Frame Skip" + { + MENUITEM "Auto", IDC_FRAMESKIPAUTO + MENUITEM "0", IDC_FRAMESKIP0 + MENUITEM "1", IDC_FRAMESKIP1 + MENUITEM "2", IDC_FRAMESKIP2 + MENUITEM "3", IDC_FRAMESKIP3 + MENUITEM "4", IDC_FRAMESKIP4 + MENUITEM "5", IDC_FRAMESKIP5 + MENUITEM "6", IDC_FRAMESKIP6 + MENUITEM "7", IDC_FRAMESKIP7 + MENUITEM "8", IDC_FRAMESKIP8 + MENUITEM "9", IDC_FRAMESKIP9 + } } POPUP "&Tools" {