Browse Source

[WIP] Refactor 3: Make screenshot work properly

1, On Windows RT, the screenshot is saved into the picture library folder.
2, Save folder is not configurable now, with the replacement of import & export feature.
louyihua 8 years ago
parent
commit
e2b06e561a
13 changed files with 193 additions and 274 deletions
  1. 5 0
      common.h
  2. 1 16
      global.c
  3. 0 1
      global.h
  4. 0 1
      palcfg.c
  5. 0 1
      palcfg.h
  6. 3 3
      uigame.c
  7. 1 1
      util.c
  8. 5 0
      util.h
  9. 3 3
      video.c
  10. 1 3
      win32/resource.h
  11. 140 140
      win32/sdlpal.rc
  12. 1 12
      win32/win32.cpp
  13. 33 93
      winrt/SDLPal.Common/WinRTUtil.cpp

+ 5 - 0
common.h

@@ -232,6 +232,7 @@ extern "C"
 #define PAL_PREFIX            UTIL_BasePath()
 #define PAL_SAVE_PREFIX       UTIL_SavePath()
 #define PAL_CONFIG_PREFIX     UTIL_ConfigPath()
+#define PAL_SCREENSHOT_PREFIX UTIL_ScreenShotPath()
 #define PAL_HAS_TOUCH         1
 #define PAL_AUDIO_DEFAULT_BUFFER_SIZE   4096
 #define PAL_DEFAULT_WINDOW_WIDTH   320
@@ -303,6 +304,10 @@ extern "C"
 # define PAL_CONFIG_PREFIX PAL_PREFIX
 #endif
 
+#ifndef PAL_SCREENSHOT_PREFIX
+# define PAL_SCREENSHOT_PREFIX PAL_SAVE_PREFIX
+#endif
+
 #ifdef _WIN32
 
 #include <windows.h>

+ 1 - 16
global.c

@@ -132,18 +132,6 @@ PAL_LoadConfig(
 					}
 					break;
 				}
-				case PALCFG_SAVEPATH:
-				{
-					int n = strlen(value.sValue);
-					while (n > 0 && isspace(value.sValue[n - 1])) n--;
-					if (n > 0)
-					{
-						gConfig.pszSavePath = (char *)realloc(gConfig.pszSavePath, n + 1);
-						memcpy(gConfig.pszSavePath, value.sValue, n);
-						gConfig.pszSavePath[n] = '\0';
-					}
-					break;
-				}
 				case PALCFG_CD:
 				{
 					if (PAL_HAS_MP3 && SDL_strncasecmp(value.sValue, "MP3", 3) == 0)
@@ -231,7 +219,6 @@ PAL_LoadConfig(
 	// Set configurable global options
 	//
 	if (!gConfig.pszGamePath) gConfig.pszGamePath = strdup(PAL_PREFIX);
-	if (!gConfig.pszSavePath) gConfig.pszSavePath = strdup(PAL_SAVE_PREFIX);
 	gConfig.eMusicType = eMusicType;
 	gConfig.eCDType = eCDType;
 	gConfig.eOPLType = eOPLType;
@@ -316,7 +303,6 @@ PAL_SaveConfig(
 		sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_OPL), opl_types[gConfig.eOPLType]); fputs(buf, fp);
 
 		if (gConfig.pszGamePath) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_GAMEPATH), gConfig.pszGamePath); fputs(buf, fp); }
-		if (gConfig.pszSavePath) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_SAVEPATH), gConfig.pszSavePath); fputs(buf, fp); }
 		if (gConfig.pszMsgFile) { sprintf(buf, "%s=%s\n", PAL_ConfigName(PALCFG_MESSAGEFILE), gConfig.pszMsgFile); fputs(buf, fp); }
 
 		fclose(fp);
@@ -426,7 +412,6 @@ PAL_FreeGlobals(
 #endif
    free(gConfig.pszMsgFile);
    free(gConfig.pszGamePath);
-   free(gConfig.pszSavePath);
 
    //
    // Clear the instance
@@ -1139,7 +1124,7 @@ PAL_InitGameData(
    //
    // try loading from the saved game file.
    //
-   if (iSaveSlot == 0 || PAL_LoadGame(va("%s%d%s", gConfig.pszSavePath, iSaveSlot, ".rpg")) != 0)
+   if (iSaveSlot == 0 || PAL_LoadGame(va("%s%d%s", PAL_SAVE_PREFIX, iSaveSlot, ".rpg")) != 0)
    {
       //
       // Cannot load the saved game file. Load the defaults.

+ 0 - 1
global.h

@@ -670,7 +670,6 @@ typedef struct tagCONFIGURATION
 
 	/* Configurable options */
 	char            *pszGamePath;
-	char            *pszSavePath;
 	char            *pszMsgFile;
 	CODEPAGE         uCodePage;
 	DWORD            dwWordLength;

+ 0 - 1
palcfg.c

@@ -31,7 +31,6 @@ static const ConfigItem gConfigItems[PALCFG_ALL_MAX] = {
 	{ PALCFG_MUSIC,             PALCFG_STRING,   "MUSIC",              5, "RIX", NULL, NULL },
 	{ PALCFG_OPL,               PALCFG_STRING,   "OPL",                3, "DOSBOX", NULL, NULL },
 	{ PALCFG_RIXEXTRAINIT,      PALCFG_STRING,   "RIXEXTRAINIT",      12, NULL, NULL, NULL },
-	{ PALCFG_SAVEPATH,          PALCFG_STRING,   "SAVEPATH",           8, NULL, NULL, NULL },
 };
 
 

+ 0 - 1
palcfg.h

@@ -71,7 +71,6 @@ typedef enum tagPALCFG_ITEM
 	PALCFG_MUSIC,
 	PALCFG_OPL,
 	PALCFG_RIXEXTRAINIT,
-	PALCFG_SAVEPATH,
 	/* Strings */
 	PALCFG_STRING_MAX,
 

+ 3 - 3
uigame.c

@@ -190,7 +190,7 @@ PAL_SaveSlotMenu(
    //
    for (i = 1; i <= 5; i++)
    {
-      fp = fopen(va("%s%d%s", gConfig.pszSavePath, i, ".rpg"), "rb");
+      fp = fopen(va("%s%d%s", PAL_SAVE_PREFIX, i, ".rpg"), "rb");
       if (fp == NULL)
       {
          wSavedTimes = 0;
@@ -577,7 +577,7 @@ PAL_SystemMenu(
          iSavedTimes = 0;
          for (i = 1; i <= 5; i++)
          {
-            fp = fopen(va("%s%d%s", gConfig.pszSavePath, i, ".rpg"), "rb");
+            fp = fopen(va("%s%d%s", PAL_SAVE_PREFIX, i, ".rpg"), "rb");
             if (fp != NULL)
             {
                WORD wSavedTimes;
@@ -590,7 +590,7 @@ PAL_SystemMenu(
                }
             }
          }
-         PAL_SaveGame(va("%s%d%s", gConfig.pszSavePath, iSlot, ".rpg"), iSavedTimes + 1);
+         PAL_SaveGame(va("%s%d%s", PAL_SAVE_PREFIX, iSlot, ".rpg"), iSavedTimes + 1);
       }
       break;
 

+ 1 - 1
util.c

@@ -540,7 +540,7 @@ UTIL_OpenLog(
    VOID
 )
 {
-   if ((pLogFile = fopen(va("%slog.txt", gConfig.pszSavePath), "a+")) == NULL)
+   if ((pLogFile = fopen(va("%slog.txt", PAL_SAVE_PREFIX), "a+")) == NULL)
    {
       return NULL;
    }

+ 5 - 0
util.h

@@ -118,6 +118,11 @@ UTIL_ConfigPath(
    VOID
 );
 
+LPCSTR
+UTIL_ScreenShotPath(
+	VOID
+);
+
 BOOL
 UTIL_GetScreenSize(
    DWORD *pdwScreenWidth,

+ 3 - 3
video.c

@@ -776,7 +776,7 @@ VIDEO_SaveScreenshot(
    //
    for (iNumBMP = 0; iNumBMP <= 9999; iNumBMP++)
    {
-      fp = fopen(va("%sscrn%.4d.bmp", gConfig.pszSavePath, iNumBMP), "rb");
+      fp = fopen(va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP), "rb");
       if (fp == NULL)
       {
          break;
@@ -793,9 +793,9 @@ VIDEO_SaveScreenshot(
    // Save the screenshot.
    //
 #if SDL_VERSION_ATLEAST(2,0,0)
-   SDL_SaveBMP(gpScreen, va("%sscrn%.4d.bmp", gConfig.pszSavePath, iNumBMP));
+   SDL_SaveBMP(gpScreen, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
 #else
-   SDL_SaveBMP(gpScreenReal, va("%sscrn%.4d.bmp", gConfig.pszSavePath, iNumBMP));
+   SDL_SaveBMP(gpScreenReal, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
 #endif
 }
 

+ 1 - 3
win32/resource.h

@@ -7,7 +7,6 @@
 #define IDS_LAUNCHSETTING               102
 #define IDS_CONFIRM                     103
 #define IDC_GAMEPATH                    1000
-#define IDC_SAVEPATH                    1001
 #define IDC_DOS                         1002
 #define IDC_WIN95                       1003
 #define IDC_CHT                         1005
@@ -31,14 +30,13 @@
 #define IDC_OPLOFFSET                   1031
 #define IDC_AUDIOBUFFER                 1032
 #define IDC_BRGAME                      1033
-#define IDC_BRSAVE                      1034
 #define IDC_STATIC                      -1
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        105
+#define _APS_NEXT_RESOURCE_VALUE        104
 #define _APS_NEXT_COMMAND_VALUE         40001
 #define _APS_NEXT_CONTROL_VALUE         1035
 #define _APS_NEXT_SYMED_VALUE           101

+ 140 - 140
win32/sdlpal.rc

@@ -24,59 +24,56 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 // Dialog
 //
 
-IDD_LAUNCHER DIALOGEX 0, 0, 405, 225
+IDD_LAUNCHER DIALOGEX 0, 0, 405, 206
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 EXSTYLE WS_EX_APPWINDOW
 CAPTION "SDL PAL Launcher"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "&Launch game",IDOK,177,204,50,14
-    PUSHBUTTON      "E&xit",IDCANCEL,7,204,50,14
+    DEFPUSHBUTTON   "&Launch game",IDOK,177,185,50,14
+    PUSHBUTTON      "E&xit",IDCANCEL,7,185,50,14
     LTEXT           "Game resource path:",IDC_STATIC,14,10,68,8
     EDITTEXT        IDC_GAMEPATH,84,7,256,14,ES_AUTOHSCROLL | ES_READONLY
-    LTEXT           "CD source:",IDC_STATIC,14,133,36,8
-    GROUPBOX        "Game version && Language",IDC_STATIC,7,47,192,64
-    CONTROL         "&DOS version",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,62,55,10
-    CONTROL         "&WIN95 version",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,62,63,10
-    CONTROL         "&Traditional Chinese",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,78,77,10
-    CONTROL         "Simplified &Chinese",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,78,73,10
-    CONTROL         "Use &embedded font",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,62,79,10
-    GROUPBOX        "Display",IDC_STATIC,206,47,192,64
-    LTEXT           "Window size:",IDC_STATIC,215,94,43,8
-    EDITTEXT        IDC_WIDTH,260,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CTEXT           "X",IDC_STATIC,295,94,8,8
-    EDITTEXT        IDC_HEIGHT,306,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CONTROL         "&Keep aspect ratio",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,78,72,10
-    LTEXT           "BGM source:",IDC_STATIC,115,133,41,8
-    CONTROL         "&Full screen",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,348,62,50,10
-    EDITTEXT        IDC_MSGFILE,59,91,131,14,ES_AUTOHSCROLL
-    GROUPBOX        "Audio",IDC_STATIC,7,118,391,78
-    COMBOBOX        IDC_CD,54,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_BGM,157,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "OPL type:",IDC_STATIC,14,153,33,8
-    COMBOBOX        IDC_OPL,54,151,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "S&tereo",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,133,37,10
-    PUSHBUTTON      "&Default",IDC_DEFAULT,348,204,50,14
-    CONTROL         "Surround &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,153,55,10
-    LTEXT           "Audio sample rate:                      Hz",IDC_STATIC,280,133,113,8
-    EDITTEXT        IDC_SAMPLERATE,342,130,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "OPL sample rate:                       Hz",IDC_STATIC,115,153,110,8
-    EDITTEXT        IDC_OPLSR,172,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "Audio quality:",IDC_STATIC,14,173,45,8
-    LTEXT           "Low                                   High",IDC_STATIC,47,182,98,8
-    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,59,171,70,15
-    LTEXT           "Volume:",IDC_STATIC,145,173,26,8
-    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,171,100,15
-    LTEXT           "Low                                              High",IDC_STATIC,163,182,120,8
-    LTEXT           "parameter:                       Hz",IDC_STATIC,304,153,94,8
-    EDITTEXT        IDC_OPLOFFSET,343,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "Audio buffer:",IDC_STATIC,299,173,44,8
-    EDITTEXT        IDC_AUDIOBUFFER,343,170,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "Game save path:",IDC_STATIC,26,28,56,8
-    EDITTEXT        IDC_SAVEPATH,84,25,256,14,ES_AUTOHSCROLL | ES_READONLY
+    LTEXT           "CD source:",IDC_STATIC,14,114,36,8
+    GROUPBOX        "Game version && Language",IDC_STATIC,7,28,192,64
+    CONTROL         "&DOS version",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,44,55,10
+    CONTROL         "&WIN95 version",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,44,63,10
+    CONTROL         "&Traditional Chinese",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,60,77,10
+    CONTROL         "Simplified &Chinese",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,60,73,10
+    CONTROL         "Use &embedded font",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,44,79,10
+    GROUPBOX        "Display",IDC_STATIC,206,28,192,64
+    LTEXT           "Window size:",IDC_STATIC,215,76,43,8
+    EDITTEXT        IDC_WIDTH,260,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CTEXT           "X",IDC_STATIC,295,76,8,8
+    EDITTEXT        IDC_HEIGHT,306,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CONTROL         "&Keep aspect ratio",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,72,10
+    LTEXT           "BGM source:",IDC_STATIC,115,114,41,8
+    CONTROL         "&Full screen",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,348,44,50,10
+    EDITTEXT        IDC_MSGFILE,59,73,131,14,ES_AUTOHSCROLL
+    GROUPBOX        "Audio",IDC_STATIC,7,100,391,78
+    COMBOBOX        IDC_CD,54,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_BGM,157,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "OPL type:",IDC_STATIC,14,135,33,8
+    COMBOBOX        IDC_OPL,54,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "S&tereo",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,114,37,10
+    PUSHBUTTON      "&Default",IDC_DEFAULT,348,185,50,14
+    CONTROL         "Surround &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,245,135,55,10
+    LTEXT           "Audio sample rate:                      Hz",IDC_STATIC,280,114,113,8
+    EDITTEXT        IDC_SAMPLERATE,342,111,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "OPL sample rate:                       Hz",IDC_STATIC,115,135,110,8
+    EDITTEXT        IDC_OPLSR,172,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "Audio quality:",IDC_STATIC,14,154,45,8
+    LTEXT           "Low                                   High",IDC_STATIC,47,164,98,8
+    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,59,153,70,15
+    LTEXT           "Volume:",IDC_STATIC,145,154,26,8
+    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,153,100,15
+    LTEXT           "Low                                              High",IDC_STATIC,163,164,120,8
+    LTEXT           "parameter:                       Hz",IDC_STATIC,304,135,94,8
+    EDITTEXT        IDC_OPLOFFSET,343,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "Audio buffer:",IDC_STATIC,299,154,44,8
+    EDITTEXT        IDC_AUDIOBUFFER,343,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "&Browse",IDC_BRGAME,348,7,50,14
-    PUSHBUTTON      "&Browse",IDC_BRSAVE,348,25,50,14
-    LTEXT           "Message file:",IDC_STATIC,14,94,43,8
+    LTEXT           "Message file:",IDC_STATIC,14,76,43,8
 END
 
 
@@ -93,7 +90,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 398
         TOPMARGIN, 7
-        BOTTOMMARGIN, 218
+        BOTTOMMARGIN, 199
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -148,6 +145,11 @@ BEGIN
     IDS_CONFIRM             "Confirm"
 END
 
+STRINGTABLE
+BEGIN
+    IDC_BRGAME              "Open game resource folder"
+END
+
 #endif    // 非特定语言 resources
 /////////////////////////////////////////////////////////////////////////////
 
@@ -164,59 +166,56 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
 // Dialog
 //
 
-IDD_LAUNCHER DIALOGEX 0, 0, 405, 225
+IDD_LAUNCHER DIALOGEX 0, 0, 405, 206
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 EXSTYLE WS_EX_APPWINDOW
 CAPTION "SDL PAL 启动器"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "启动游戏(&L)",IDOK,177,204,50,14
-    PUSHBUTTON      "退出(&X)",IDCANCEL,7,204,50,14
+    DEFPUSHBUTTON   "启动游戏(&L)",IDOK,177,185,50,14
+    PUSHBUTTON      "退出(&X)",IDCANCEL,7,185,50,14
     LTEXT           "游戏资源目录:",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
-    LTEXT           "CD 音源:",IDC_STATIC,14,133,36,8
-    GROUPBOX        "游戏资源版本及语言设置",IDC_STATIC,7,47,192,64
-    CONTROL         "&DOS 版",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,62,40,10
-    CONTROL         "&WIN95 版",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,62,48,10
-    CONTROL         "繁体中文(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,78,57,10
-    CONTROL         "简体中文(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,78,58,10
-    CONTROL         "使用游戏内字体(&E)",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,62,81,10
-    GROUPBOX        "显示设置",IDC_STATIC,206,47,192,64
-    LTEXT           "窗口尺寸:",IDC_STATIC,215,94,41,8
-    EDITTEXT        IDC_WIDTH,260,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CTEXT           "X",IDC_STATIC,295,94,8,8
-    EDITTEXT        IDC_HEIGHT,306,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CONTROL         "保持纵横比(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,78,65,10
-    LTEXT           "BGM 音源:",IDC_STATIC,115,133,41,8
-    CONTROL         "全屏启动游戏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,325,62,73,10
-    EDITTEXT        IDC_MSGFILE,57,91,133,14,ES_AUTOHSCROLL
-    GROUPBOX        "音频设置",IDC_STATIC,7,118,391,78
-    COMBOBOX        IDC_CD,54,131,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_BGM,157,131,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "OPL 类型:",IDC_STATIC,14,153,40,8
-    COMBOBOX        IDC_OPL,54,151,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "立体声(&T)",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,132,49,10
-    PUSHBUTTON      "默认设置(&D)",IDC_DEFAULT,348,204,50,14
-    CONTROL         "环绕声 &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,153,55,10
-    LTEXT           "音频采样率:                      Hz",IDC_STATIC,285,133,101,8
-    EDITTEXT        IDC_SAMPLERATE,335,130,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "OPL 采样率:                       Hz",IDC_STATIC,115,153,102,8
-    EDITTEXT        IDC_OPLSR,165,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "音频质量:",IDC_STATIC,14,173,41,8
-    LTEXT           "低                                   高",IDC_STATIC,47,182,87,8
-    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,55,171,70,15
-    LTEXT           "音量:",IDC_STATIC,145,173,25,8
-    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,171,100,15
-    LTEXT           "低                                                  高",IDC_STATIC,163,182,117,8
-    LTEXT           "参数:                     Hz",IDC_STATIC,285,153,75,8
-    EDITTEXT        IDC_OPLOFFSET,308,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "音频缓冲区:",IDC_STATIC,291,173,49,8
-    EDITTEXT        IDC_AUDIOBUFFER,341,170,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "游戏存档目录:",IDC_STATIC,14,28,57,8
-    EDITTEXT        IDC_SAVEPATH,71,25,270,14,ES_AUTOHSCROLL | ES_READONLY
+    LTEXT           "CD 音源:",IDC_STATIC,14,114,36,8
+    GROUPBOX        "游戏资源版本及语言设置",IDC_STATIC,7,28,192,64
+    CONTROL         "&DOS 版",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,44,40,10
+    CONTROL         "&WIN95 版",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,44,48,10
+    CONTROL         "繁体中文(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,60,57,10
+    CONTROL         "简体中文(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,60,58,10
+    CONTROL         "使用游戏内字体(&E)",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,44,81,10
+    GROUPBOX        "显示设置",IDC_STATIC,206,28,192,64
+    LTEXT           "窗口尺寸:",IDC_STATIC,215,76,41,8
+    EDITTEXT        IDC_WIDTH,260,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CTEXT           "X",IDC_STATIC,295,76,8,8
+    EDITTEXT        IDC_HEIGHT,306,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CONTROL         "保持纵横比(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
+    LTEXT           "BGM 音源:",IDC_STATIC,115,114,41,8
+    CONTROL         "全屏启动游戏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,325,44,73,10
+    EDITTEXT        IDC_MSGFILE,57,73,133,14,ES_AUTOHSCROLL
+    GROUPBOX        "音频设置",IDC_STATIC,7,100,391,78
+    COMBOBOX        IDC_CD,54,113,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_BGM,157,113,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "OPL 类型:",IDC_STATIC,14,135,40,8
+    COMBOBOX        IDC_OPL,54,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "立体声(&T)",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,114,49,10
+    PUSHBUTTON      "默认设置(&D)",IDC_DEFAULT,348,185,50,14
+    CONTROL         "环绕声 &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,135,55,10
+    LTEXT           "音频采样率:                      Hz",IDC_STATIC,285,114,101,8
+    EDITTEXT        IDC_SAMPLERATE,335,111,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "OPL 采样率:                       Hz",IDC_STATIC,115,135,102,8
+    EDITTEXT        IDC_OPLSR,165,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "音频质量:",IDC_STATIC,14,154,41,8
+    LTEXT           "低                                   高",IDC_STATIC,47,164,87,8
+    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,55,153,70,15
+    LTEXT           "音量:",IDC_STATIC,145,154,25,8
+    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,153,100,15
+    LTEXT           "低                                                  高",IDC_STATIC,163,164,117,8
+    LTEXT           "参数:                     Hz",IDC_STATIC,285,135,75,8
+    EDITTEXT        IDC_OPLOFFSET,308,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "音频缓冲区:",IDC_STATIC,291,154,49,8
+    EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "浏览(&B)",IDC_BRGAME,348,7,50,14
-    PUSHBUTTON      "浏览(&B)",IDC_BRSAVE,348,25,50,14
-    LTEXT           "语言文件:",IDC_STATIC,14,94,41,8
+    LTEXT           "语言文件:",IDC_STATIC,14,76,41,8
 END
 
 
@@ -233,7 +232,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 398
         TOPMARGIN, 7
-        BOTTOMMARGIN, 218
+        BOTTOMMARGIN, 199
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -365,8 +364,7 @@ END
 
 STRINGTABLE
 BEGIN
-    IDC_BRGAME              "打开游戏资源目录"
-    IDC_BRSAVE              "打开游戏存档目录"
+    IDC_BRGAME              "打开游戏资源文件夹"
 END
 
 #endif    // 中文(简体,中国) resources
@@ -385,59 +383,56 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
 // Dialog
 //
 
-IDD_LAUNCHER DIALOGEX 0, 0, 405, 225
+IDD_LAUNCHER DIALOGEX 0, 0, 405, 206
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 EXSTYLE WS_EX_APPWINDOW
 CAPTION "SDL PAL 币笆竟"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "币笆笴栏(&L)",IDOK,177,204,50,14
-    PUSHBUTTON      "癶�(&X)",IDCANCEL,7,204,50,14
+    DEFPUSHBUTTON   "币笆笴栏(&L)",IDOK,177,185,50,14
+    PUSHBUTTON      "癶�(&X)",IDCANCEL,7,185,50,14
     LTEXT           "笴栏戈方郎Ж�",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
-    LTEXT           "CD �方�",IDC_STATIC,14,133,36,8
-    GROUPBOX        "笴栏戈方�セの粂ē砞﹚",IDC_STATIC,7,47,192,64
-    CONTROL         "&DOS �",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,62,40,10
-    CONTROL         "&WIN95 �",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,62,48,10
-    CONTROL         "羉砰いゅ(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,78,57,10
-    CONTROL         "虏砰いゅ(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,78,58,10
-    CONTROL         "ㄏノ笴栏ず�砰(&E)",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,62,81,10
-    GROUPBOX        "陪ボ砞﹚",IDC_STATIC,206,47,192,64
-    LTEXT           "跌怠へ��",IDC_STATIC,215,94,41,8
-    EDITTEXT        IDC_WIDTH,260,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CTEXT           "X",IDC_STATIC,295,94,8,8
-    EDITTEXT        IDC_HEIGHT,306,91,32,14,ES_AUTOHSCROLL | ES_NUMBER
-    CONTROL         "玂�羇绢ゑ(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,78,65,10
-    LTEXT           "BGM �方�",IDC_STATIC,115,133,41,8
-    CONTROL         "��币笆笴栏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,325,62,73,10
-    EDITTEXT        IDC_MSGFILE,57,91,133,14,ES_AUTOHSCROLL
-    GROUPBOX        "�癟砞﹚",IDC_STATIC,7,118,391,78
-    COMBOBOX        IDC_CD,54,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_BGM,157,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "OPL 摸��",IDC_STATIC,14,153,40,8
-    COMBOBOX        IDC_OPL,54,151,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "ミ砰羘(&T)",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,132,49,10
-    PUSHBUTTON      "纐粄砞﹚(&D)",IDC_DEFAULT,348,204,50,14
-    CONTROL         "吏露羘 &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,153,55,10
-    LTEXT           "�癟�妓硉瞯�                      Hz",IDC_STATIC,285,133,109,8
-    EDITTEXT        IDC_SAMPLERATE,342,130,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "OPL �妓硉瞯�                       Hz",IDC_STATIC,115,153,110,8
-    EDITTEXT        IDC_OPLSR,172,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "�癟珇借�",IDC_STATIC,14,173,41,8
-    LTEXT           "�                                   蔼",IDC_STATIC,47,182,87,8
-    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,55,171,70,15
-    LTEXT           "�秖�",IDC_STATIC,145,173,25,8
-    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,171,100,15
-    LTEXT           "�                                                  蔼",IDC_STATIC,163,182,117,8
-    LTEXT           "把计�                     Hz",IDC_STATIC,297,153,75,8
-    EDITTEXT        IDC_OPLOFFSET,320,150,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "�癟絯侥跋�",IDC_STATIC,291,173,49,8
-    EDITTEXT        IDC_AUDIOBUFFER,341,170,40,14,ES_AUTOHSCROLL | ES_NUMBER
-    LTEXT           "笴栏秈�郎Ж�",IDC_STATIC,15,27,57,8
-    EDITTEXT        IDC_SAVEPATH,71,25,270,14,ES_AUTOHSCROLL | ES_READONLY
+    LTEXT           "CD �方�",IDC_STATIC,14,114,36,8
+    GROUPBOX        "笴栏戈方�セの粂ē砞﹚",IDC_STATIC,7,28,192,64
+    CONTROL         "&DOS �",IDC_DOS,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,44,40,10
+    CONTROL         "&WIN95 �",IDC_WIN95,"Button",BS_AUTORADIOBUTTON,102,44,48,10
+    CONTROL         "羉砰いゅ(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,60,57,10
+    CONTROL         "虏砰いゅ(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,60,58,10
+    CONTROL         "ㄏノ笴栏ず�砰(&E)",IDC_EMBEDFONT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,44,81,10
+    GROUPBOX        "陪ボ砞﹚",IDC_STATIC,206,28,192,64
+    LTEXT           "跌怠へ��",IDC_STATIC,215,76,41,8
+    EDITTEXT        IDC_WIDTH,260,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CTEXT           "X",IDC_STATIC,295,76,8,8
+    EDITTEXT        IDC_HEIGHT,306,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
+    CONTROL         "玂�羇绢ゑ(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
+    LTEXT           "BGM �方�",IDC_STATIC,115,114,41,8
+    CONTROL         "��币笆笴栏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,325,44,73,10
+    EDITTEXT        IDC_MSGFILE,57,73,133,14,ES_AUTOHSCROLL
+    GROUPBOX        "�癟砞﹚",IDC_STATIC,7,100,391,78
+    COMBOBOX        IDC_CD,54,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_BGM,157,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "OPL 摸��",IDC_STATIC,14,135,40,8
+    COMBOBOX        IDC_OPL,54,132,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "ミ砰羘(&T)",IDC_STEREO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,225,114,49,10
+    PUSHBUTTON      "纐粄砞﹚(&D)",IDC_DEFAULT,348,185,50,14
+    CONTROL         "吏露羘 &OPL",IDC_SURROUNDOPL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,235,135,55,10
+    LTEXT           "�癟�妓硉瞯�                      Hz",IDC_STATIC,285,114,109,8
+    EDITTEXT        IDC_SAMPLERATE,342,111,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "OPL �妓硉瞯�                       Hz",IDC_STATIC,115,135,110,8
+    EDITTEXT        IDC_OPLSR,172,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "�癟珇借�",IDC_STATIC,14,154,41,8
+    LTEXT           "�                                   蔼",IDC_STATIC,47,164,87,8
+    CONTROL         "",IDC_QUALITY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,55,153,70,15
+    LTEXT           "�秖�",IDC_STATIC,145,154,25,8
+    CONTROL         "",IDC_VOLUME,"msctls_trackbar32",WS_TABSTOP,170,153,100,15
+    LTEXT           "�                                                  蔼",IDC_STATIC,163,164,117,8
+    LTEXT           "把计�                     Hz",IDC_STATIC,297,135,75,8
+    EDITTEXT        IDC_OPLOFFSET,320,132,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "�癟絯侥跋�",IDC_STATIC,291,154,49,8
+    EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "聅凝(&B)",IDC_BRGAME,348,7,50,14
-    PUSHBUTTON      "聅凝(&B)",IDC_BRSAVE,348,25,50,14
-    LTEXT           "粂ē郎�",IDC_STATIC,14,94,33,8
+    LTEXT           "粂ē郎�",IDC_STATIC,14,76,33,8
 END
 
 
@@ -454,7 +449,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 398
         TOPMARGIN, 7
-        BOTTOMMARGIN, 218
+        BOTTOMMARGIN, 199
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -509,6 +504,11 @@ BEGIN
     IDS_CONFIRM             "絋粄"
 END
 
+STRINGTABLE
+BEGIN
+    IDC_BRGAME              "ゴ秨笴栏戈方郎Ж"
+END
+
 #endif    // 中文(繁体,台湾) resources
 /////////////////////////////////////////////////////////////////////////////
 

+ 1 - 12
win32/win32.cpp

@@ -96,15 +96,6 @@ void SaveSettings(HWND hwndDlg, BOOL fWriteFile)
 	{
 		free(gConfig.pszGamePath); gConfig.pszGamePath = nullptr;
 	}
-	if ((textLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_SAVEPATH))) > 0)
-	{
-		gConfig.pszSavePath = (char*)realloc(gConfig.pszSavePath, textLen + 1);
-		GetDlgItemTextA(hwndDlg, IDC_SAVEPATH, gConfig.pszSavePath, textLen + 1);
-	}
-	else
-	{
-		free(gConfig.pszSavePath); gConfig.pszSavePath = nullptr;
-	}
 
 	gConfig.fIsWIN95 = !IsDlgButtonChecked(hwndDlg, IDC_DOS);
 	gConfig.fUseEmbeddedFonts = !gConfig.fIsWIN95 && IsDlgButtonChecked(hwndDlg, IDC_EMBEDFONT);
@@ -161,7 +152,6 @@ void ResetControls(HWND hwndDlg)
 	SetDlgItemText(hwndDlg, IDC_AUDIOBUFFER, _itot(gConfig.wAudioBufferSize, buffer, 10));
 
 	if (gConfig.pszGamePath) SetDlgItemTextA(hwndDlg, IDC_GAMEPATH, gConfig.pszGamePath);
-	if (gConfig.pszSavePath) SetDlgItemTextA(hwndDlg, IDC_SAVEPATH, gConfig.pszSavePath);
 	if (gConfig.pszMsgFile) SetDlgItemTextA(hwndDlg, IDC_MSGFILE, gConfig.pszMsgFile);
 
 	TrackBar_SetRange(hwndDlg, IDC_QUALITY, 0, 4, FALSE);
@@ -243,7 +233,6 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 		return TRUE;
 
 	case IDC_BRGAME:
-	case IDC_BRSAVE:
 	{
 		TCHAR szName[MAX_PATH * 2], szTitle[200];
 		BROWSEINFO bi = { hwndDlg, nullptr, szName, szTitle, BIF_USENEWUI, nullptr, NULL, 0 };
@@ -254,7 +243,7 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 			SHGetPathFromIDList(pidl, szName);
 			int n = _tcslen(szName);
 			if (szName[n - 1] != '\\') _tcscat(szName, L"\\");
-			SetDlgItemText(hwndDlg, idControl - IDC_BRGAME + IDC_GAMEPATH, szName);
+			SetDlgItemText(hwndDlg, IDC_GAMEPATH, szName);
 		}
 		return TRUE;
 	}

+ 33 - 93
winrt/SDLPal.Common/WinRTUtil.cpp

@@ -11,104 +11,14 @@ extern "C" void TerminateOnError(const char *fmt, ...);
 
 #define PAL_PATH_NAME	"SDLPAL"
 
-static std::string g_savepath, g_basepath, g_configpath;
-static Windows::Storage::StorageFolder ^g_basefolder, ^g_savefolder, ^g_configfolder;
+static std::string g_savepath, g_basepath, g_configpath, g_screenshotpath;
+static Windows::Storage::StorageFolder ^g_basefolder, ^g_savefolder, ^g_configfolder, ^g_screenshotfolder;
 
-static Windows::Storage::StorageFolder^ CheckGamePath(Windows::Storage::StorageFolder^ root, HANDLE eventHandle)
-{
-	Platform::String^ required_files[] = {
-		L"ABC.MKF", L"BALL.MKF", L"DATA.MKF", L"F.MKF", L"FBP.MKF",
-		L"FIRE.MKF", L"GOP.MKF", L"MAP.MKF", L"MGO.MKF", L"PAT.MKF",
-		L"RGM.MKF", L"RNG.MKF", L"SSS.MKF"
-	};
-	Platform::String^ optional_required_files[] = {
-		L"VOC.MKF", L"SOUNDS.MKF"
-	};
-	/* The words.dat & m.msg may be configurable in the future, so not check here */
-
-	try
-	{
-		/* Try to get the path */
-		auto folder = AWait(root->GetFolderAsync(PAL_PATH_NAME), eventHandle);
-
-		/* Check the access right of necessary files */
-		for (int i = 0; i < 13; i++)
-		{
-			if (!AWait(AWait(folder->GetFileAsync(required_files[i]), eventHandle)->OpenReadAsync(), eventHandle)->CanRead)
-				return nullptr;
-		}
-
-		for (int i = 0; i < 2; i++)
-		{
-			try {
-				if (AWait(AWait(folder->GetFileAsync(optional_required_files[i]), eventHandle)->OpenReadAsync(), eventHandle)->CanRead)
-					return folder;
-			}
-			catch (Platform::Exception^) {}
-		}
-	}
-	catch (Platform::Exception^)
-	{ /* Accessing SD card failed, or required file is missing, or access is denied */
-	}
-	return nullptr;
-}
+extern HANDLE g_eventHandle;
 
 extern "C"
 LPCSTR UTIL_BasePath(VOID)
 {
-	//if (g_basepath.empty())
-	//{
-	//	Windows::Storage::StorageFolder^ folder = nullptr;
-	//	HANDLE eventHandle = CreateEventEx(NULL, NULL, 0, EVENT_ALL_ACCESS);
-	//	auto folders = AWait(Windows::Storage::KnownFolders::RemovableDevices->GetFoldersAsync())->First();
-	//	while (folders->HasCurrent)
-	//	{
-	//		if (folder = CheckGamePath(folders->Current, eventHandle))
-	//			break;
-	//		else
-	//			folders->MoveNext();
-	//	}
-
-	//	if (!folder)
-	//	{
-	//		Windows::Storage::StorageFolder^ search_folders[] = {
-	//			Windows::Storage::KnownFolders::PicturesLibrary,
-	//			Windows::Storage::KnownFolders::SavedPictures,
-	//			//Windows::Storage::KnownFolders::MusicLibrary,
-	//			//Windows::Storage::KnownFolders::VideosLibrary,
-	//		};
-	//		for (int i = 0; i < sizeof(search_folders) / sizeof(search_folders[0]); i++)
-	//		{
-	//			if (folder = CheckGamePath(search_folders[i], eventHandle))
-	//				break;
-	//		}
-	//	}
-
-	//	CloseHandle(eventHandle);
-
-	//	if (folder)
-	//	{
-	//		/* Folder examination succeeded */
-	//		auto path = folder->Path;
-	//		if (path->End()[-1] != L'\\') path += "\\";
-	//		ConvertString(path, g_basepath);
-	//		g_basefolder = folder;
-
-	//		/* Check whether the folder is writable */
-	//		FILE* fp = fopen(ConvertString(path + "sdlpal.rpg").c_str(), "wb");
-	//		if (fp)
-	//		{
-	//			g_savepath = g_basepath;
-	//			g_savefolder = g_basefolder;
-	//			fclose(fp);
-	//		}
-	//	}
-	//	else
-	//	{
-	//		TerminateOnError("Could not find PAL folder.\n");
-	//		//ConvertString(Windows::ApplicationModel::Package::Current->InstalledLocation->Path + "\\Assets\\Data\\", g_basepath);
-	//	}
-	//}
 	if (g_basepath.empty())
 	{
 		g_basefolder = Windows::Storage::ApplicationData::Current->LocalFolder;
@@ -145,6 +55,36 @@ LPCSTR UTIL_ConfigPath(VOID)
 	return g_configpath.c_str();
 }
 
+extern "C"
+LPCSTR UTIL_ScreenShotPath(VOID)
+{
+	if (g_screenshotpath.empty())
+	{
+		Windows::Storage::StorageFolder^ folder = nullptr;
+
+		try { folder = AWait(Windows::Storage::KnownFolders::PicturesLibrary->GetFolderAsync("SDLPAL"), g_eventHandle); }
+		catch (Platform::Exception^) {}
+		if (folder == nullptr)
+		{
+			try { folder = AWait(Windows::Storage::KnownFolders::PicturesLibrary->CreateFolderAsync("SDLPAL"), g_eventHandle); }
+			catch (Platform::Exception^) {}
+		}
+		if (folder)
+		{
+			g_screenshotfolder = folder;
+			auto localfolder = g_screenshotfolder->Path;
+			if (localfolder->End()[-1] != L'\\') localfolder += "\\";
+			ConvertString(localfolder, g_screenshotpath);
+		}
+		else
+		{
+			g_screenshotpath = UTIL_SavePath();
+			g_screenshotfolder = g_savefolder;
+		}
+	}
+	return g_screenshotpath.c_str();
+}
+
 static BOOL UTIL_IsMobile(VOID)
 {
 	auto rc = Windows::ApplicationModel::Resources::Core::ResourceContext::GetForCurrentView();