Browse Source

Resource version auto-detection & bug fixes & fullscreen enabled

1. Now it is possible to auto-detect resource version during runtime, so the need for 'DOS=' configuration item is eliminated.
2. Configuration pages are modified to reflect change 1.
3. On WP platform, the status bar is now completely shown on default.
4. Fullscreen toggle is re-enabled, and the fullscreen state is kept between game launches.
5. Touch overlay can now be enabled on all systems. On touch-based devices, it is enabled by default.
6. Fix two sound play bugs & position of triple-section menu.
7. Window is now resizable under WIN32.
louyihua 8 years ago
parent
commit
3d484b530d
22 changed files with 211 additions and 227 deletions
  1. 1 1
      common.h
  2. 13 6
      fight.c
  3. 71 5
      global.c
  4. 6 1
      global.h
  5. 0 4
      input.c
  6. 0 2
      input.h
  7. 1 1
      main.c
  8. 0 4
      overlay.c
  9. 10 14
      palcfg.c
  10. 2 6
      palcfg.h
  11. 1 12
      play.c
  12. 3 10
      sdlpal.cfg.example
  13. 20 15
      uigame.c
  14. 5 0
      uigame.h
  15. 30 67
      video.c
  16. 2 3
      win32/resource.h
  17. 9 15
      win32/sdlpal.rc
  18. 8 32
      win32/win32.cpp
  19. 1 2
      winrt/SDLPal.Common/MainPage.xaml
  20. 16 26
      winrt/SDLPal.Common/MainPage.xaml.cpp
  21. 3 1
      winrt/SDLPal.Common/MainPage.xaml.h
  22. 9 0
      winrt/SDLPal.UWP/SDLPal.UWP.vcxproj

+ 1 - 1
common.h

@@ -265,7 +265,7 @@ extern "C"
 #define PAL_DEFAULT_FULLSCREEN_HEIGHT 480
 
 # if SDL_VERSION_ATLEAST(2,0,0)
-#  define PAL_VIDEO_INIT_FLAGS  (SDL_WINDOW_SHOWN)
+#  define PAL_VIDEO_INIT_FLAGS  (SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | (gConfig.fFullScreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0))
 # else
 #  define PAL_VIDEO_INIT_FLAGS  (SDL_HWSURFACE | SDL_RESIZABLE | (gConfig.fFullScreen ? SDL_FULLSCREEN : 0))
 # endif

+ 13 - 6
fight.c

@@ -2905,6 +2905,14 @@ PAL_BattleShowPlayerSummonMagicAnim(
 
    assert(wEffectMagicID < MAX_OBJECTS);
 
+   //
+   // Sound should be played before magic begins
+   //
+   if (gConfig.fIsWIN95)
+   {
+	   SOUND_Play(gpGlobals->g.lprgMagic[wMagicNum].wSound);
+   }
+
    //
    // Brighten the players
    //
@@ -2920,11 +2928,6 @@ PAL_BattleShowPlayerSummonMagicAnim(
 
    PAL_BattleBackupScene();
 
-   if (gConfig.fIsWIN95)
-   {
-      SOUND_Play(gpGlobals->g.lprgMagic[wMagicNum].wSound);
-   }
-
    //
    // Load the sprite of the summoned god
    //
@@ -3556,6 +3559,11 @@ PAL_BattlePlayerPerformAction(
       }
       else
       {
+         //
+         // Sound should be played before action begins
+         //
+         SOUND_Play(29);
+
          for (i = 1; i <= 6; i++)
          {
             //
@@ -3615,7 +3623,6 @@ PAL_BattlePlayerPerformAction(
 
          g_Battle.rgPlayer[wPlayerIndex].iColorShift = 6;
          g_Battle.rgPlayer[wPlayerIndex].wCurrentFrame = 5;
-         SOUND_Play(29);
          PAL_BattleDelay(5, 0, TRUE);
 
          g_Battle.rgPlayer[wPlayerIndex].wCurrentFrame = 6;

+ 71 - 5
global.c

@@ -49,6 +49,67 @@ CONFIGURATION gConfig;
       DO_BYTESWAP(buf, size);                                    \
    } while(0)
 
+BOOL
+PAL_IsWINVersion(
+	BOOL *pfIsWIN95
+)
+{
+	FILE *fps[] = { UTIL_OpenRequiredFile("abc.mkf"), UTIL_OpenRequiredFile("map.mkf"), gpGlobals->f.fpF, gpGlobals->f.fpFBP, gpGlobals->f.fpFIRE, gpGlobals->f.fpMGO };
+	char *data = NULL;
+	int data_size = 0, dos_score = 0, win_score = 0;
+	BOOL result = FALSE;
+
+	for (int i = 0; i < sizeof(fps) / sizeof(FILE *); i++)
+	{
+		//
+		// Find the first non-empty sub-file
+		//
+		int count = PAL_MKFGetChunkCount(fps[i]), j = 0, size;
+		while (j < count && (size = PAL_MKFGetChunkSize(j, fps[i])) < 4) j++;
+		if (j >= count) goto PAL_IsWINVersion_Exit;
+
+		//
+		// Read the content and check the compression signature
+		// Note that this check is not 100% correct, however in incorrect situations,
+		// the sub-file will be over 784MB if uncompressed, which is highly unlikely.
+		//
+		if (data_size < size) data = (char *)realloc(data, data_size = size);
+		PAL_MKFReadChunk(data, data_size, j, fps[i]);
+		if (data[0] == 'Y' && data[1] == 'J' && data[2] == '_' && data[3] == '1')
+		{
+			if (win_score > 0)
+				goto PAL_IsWINVersion_Exit;
+			else
+				dos_score++;
+		}
+		else
+		{
+			if (dos_score > 0)
+				goto PAL_IsWINVersion_Exit;
+			else
+				win_score++;
+		}
+	}
+
+	//
+	// Finally check the size of object definition
+	//
+	data_size = PAL_MKFGetChunkSize(2, gpGlobals->f.fpSSS);
+	if (data_size % sizeof(OBJECT) == 0 && data_size % sizeof(OBJECT_DOS) != 0 && dos_score > 0) goto PAL_IsWINVersion_Exit;
+	if (data_size % sizeof(OBJECT_DOS) == 0 && data_size % sizeof(OBJECT) != 0 && win_score > 0) goto PAL_IsWINVersion_Exit;
+
+	if (pfIsWIN95) *pfIsWIN95 = (win_score == sizeof(fps) / sizeof(FILE *)) ? TRUE : FALSE;
+
+	result = TRUE;
+
+PAL_IsWINVersion_Exit:
+	free(data);
+	fclose(fps[1]);
+	fclose(fps[0]);
+
+	return result;
+}
+
 INT
 PAL_InitGlobals(
    VOID
@@ -68,11 +129,6 @@ PAL_InitGlobals(
 
 --*/
 {
-   //
-   // Set decompress function
-   //
-   Decompress = gConfig.fIsWIN95 ? YJ2_Decompress : YJ1_Decompress;
-
    //
    // Open files
    //
@@ -85,6 +141,16 @@ PAL_InitGlobals(
    gpGlobals->f.fpRGM = UTIL_OpenRequiredFile("rgm.mkf");
    gpGlobals->f.fpSSS = UTIL_OpenRequiredFile("sss.mkf");
 
+   //
+   // Retrieve game resource version & language
+   //
+   if (!PAL_IsWINVersion(&gConfig.fIsWIN95)) return -1;
+
+   //
+   // Set decompress function
+   //
+   Decompress = gConfig.fIsWIN95 ? YJ2_Decompress : YJ1_Decompress;
+
    gpGlobals->lpObjectDesc = gConfig.fIsWIN95 ? NULL : PAL_LoadObjectDesc(va("%s%s", gConfig.pszGamePath, "desc.dat"));
    gpGlobals->bCurrentSaveSlot = 1;
 

+ 6 - 1
global.h

@@ -421,7 +421,7 @@ typedef struct tagMAGIC
    WORD               wCostMP;               // MP cost
    WORD               wBaseDamage;           // base damage
    WORD               wElemental;            // elemental (0 = No Elemental, last = poison)
-   WORD               wSound;                // sound played when using this magic
+   SHORT              wSound;                // sound played when using this magic
 } MAGIC, *LPMAGIC;
 
 typedef struct tagBATTLEFIELD
@@ -619,6 +619,11 @@ typedef struct tagGLOBALVARS
 
 extern GLOBALVARS * const gpGlobals;
 
+BOOL
+PAL_IsWINVersion(
+   BOOL *pfIsWIN95
+);
+
 INT
 PAL_InitGlobals(
    VOID

+ 0 - 4
input.c

@@ -676,7 +676,6 @@ PAL_JoystickEventFilter(
 #endif
 }
 
-#if PAL_HAS_TOUCH
 
 #define  TOUCH_NONE     0
 #define    TOUCH_UP      1
@@ -842,7 +841,6 @@ PAL_UnsetTouchAction(
       break;
    }
 }
-#endif
 
 static VOID
 PAL_TouchEventFilter(
@@ -863,7 +861,6 @@ PAL_TouchEventFilter(
 
 --*/
 {
-#if PAL_HAS_TOUCH
    static SDL_TouchID finger1 = -1, finger2 = -1;
    static int prev_touch1 = TOUCH_NONE;
    static int prev_touch2 = TOUCH_NONE;
@@ -927,7 +924,6 @@ PAL_TouchEventFilter(
       }
       break;
    }
-#endif
 }
 
 static int SDLCALL

+ 0 - 2
input.h

@@ -85,14 +85,12 @@ PAL_PollEvent(
    SDL_Event *event
 );
 
-# if PAL_HAS_TOUCH
 VOID
 PAL_SetTouchBounds(
    DWORD dwScreenWidth,
    DWORD dwScreenHeight,
    SDL_Rect renderRect
 );
-# endif
 
 extern BOOL g_fUseJoystick;
 

+ 1 - 1
main.c

@@ -110,7 +110,7 @@ PAL_Init(
 
    SDL_WM_SetCaption("Loading...", NULL);
 
-   e = PAL_InitFont(gConfig.fUseEmbeddedFonts);
+   e = PAL_InitFont(!gConfig.fIsWIN95 && gConfig.fUseEmbeddedFonts);
    if (e != 0)
    {
       TerminateOnError("Could not load fonts: %d.\n", e);

+ 0 - 4
overlay.c

@@ -1,7 +1,5 @@
 #include "common.h"
 
-#if PAL_HAS_TOUCH
-
 const static uint32_t bmp_count[] = {
 	0x000cd604,0x0002453a,0x0002423d,0x00023f3f,0x00023d43,0x00023c43,0x00023b45,0x00023b45,0x00023946,0x00019f47,0x00008b0f,0x00019c47,0x00008815,0x00013847,0x00005d04,0x0000851b,
 	0x00013047,0x00005214,0x00008221,0x00012c47,0x00004c1c,0x00008025,0x00012a47,0x00004820,0x00007e29,0x00012847,0x00004424,0x00007c2d,0x00012647,0x00004128,0x00007b2f,0x00012447,
@@ -5318,5 +5316,3 @@ const void * PAL_LoadOverlayBMP(int *length)
 
 	return bmp;
 }
-
-#endif

+ 10 - 14
palcfg.c

@@ -5,15 +5,18 @@
 #include "resampler.h"
 #include <stdint.h>
 
+#if !defined(PAL_HAS_TOUCH)
+#define PAL_HAS_TOUCH     0
+#endif
+
 static const ConfigItem gConfigItems[PALCFG_ALL_MAX] = {
-	{ PALCFG_DOS,               PALCFG_BOOLEAN,  "DOS",                3, TRUE,  FALSE, TRUE },								// Default for DOS
 	{ PALCFG_FULLSCREEN,        PALCFG_BOOLEAN,  "FULLSCREEN",        10, FALSE, FALSE, TRUE },
 	{ PALCFG_KEEPASPECTRATIO,   PALCFG_BOOLEAN,  "KEEPASPECTRATIO",   15, TRUE,  FALSE, TRUE },
 	{ PALCFG_LAUNCHSETTING,     PALCFG_BOOLEAN,  "LAUNCHSETTING",     13, TRUE,  FALSE, TRUE },
 	{ PALCFG_STEREO,            PALCFG_BOOLEAN,  "STEREO",             6, TRUE,  FALSE, TRUE },								// Default for stereo audio
 	{ PALCFG_USEEMBEDDEDFONTS,  PALCFG_BOOLEAN,  "USEEMBEDDEDFONTS",  16, TRUE,  FALSE, TRUE },								// Default for using embedded fonts in DOS version
 	{ PALCFG_USESURROUNDOPL,    PALCFG_BOOLEAN,  "USESURROUNDOPL",    14, TRUE,  FALSE, TRUE },								// Default for using surround opl
-	{ PALCFG_USETOUCHOVERLAY,   PALCFG_BOOLEAN,  "USETOUCHOVERLAY",   15, TRUE,  FALSE, TRUE },
+	{ PALCFG_USETOUCHOVERLAY,   PALCFG_BOOLEAN,  "USETOUCHOVERLAY",   15, PAL_HAS_TOUCH, FALSE, TRUE },
 
 	{ PALCFG_SURROUNDOPLOFFSET, PALCFG_INTEGER,  "SURROUNDOPLOFFSET", 17, 384,   INT32_MIN, INT32_MAX },
 
@@ -356,18 +359,15 @@ PAL_LoadConfig(
 	gConfig.dwWordLength = 10;	// This is the default value for Chinese version
 	gConfig.ScreenLayout = screen_layout;
 
-	gConfig.fIsWIN95 = !values[PALCFG_DOS].bValue;
-	gConfig.fUseEmbeddedFonts = values[PALCFG_DOS].bValue && values[PALCFG_USEEMBEDDEDFONTS].bValue;
+	gConfig.fIsWIN95 = FALSE;	// Default for DOS version
+	gConfig.fUseEmbeddedFonts = values[PALCFG_USEEMBEDDEDFONTS].bValue;
 	gConfig.fUseSurroundOPL = values[PALCFG_STEREO].bValue && values[PALCFG_USESURROUNDOPL].bValue;
 	gConfig.fLaunchSetting = values[PALCFG_LAUNCHSETTING].bValue;
-#if PAL_HAS_TOUCH
 	gConfig.fUseTouchOverlay = values[PALCFG_USETOUCHOVERLAY].bValue;
-#endif
 #if SDL_VERSION_ATLEAST(2,0,0)
 	gConfig.fKeepAspectRatio = values[PALCFG_KEEPASPECTRATIO].bValue;
-#else
-	gConfig.fFullScreen = values[PALCFG_FULLSCREEN].bValue;
 #endif
+	gConfig.fFullScreen = values[PALCFG_FULLSCREEN].bValue;
 	gConfig.iAudioChannels = values[PALCFG_STEREO].bValue ? 2 : 1;
 
 	gConfig.iSurroundOPLOffset = values[PALCFG_SURROUNDOPLOFFSET].iValue;
@@ -398,25 +398,21 @@ PAL_SaveConfig(
 )
 {
 	static const char *music_types[] = { "RIX", "MIDI", "MP3", "OGG", "RAW" };
-	static const char *opl_types[] = { "DOSBOX", "MAME" };
+	static const char *opl_types[] = { "DOSBOX", "MAME", "DOSBOXNEW" };
 	char buf[512];
 	FILE *fp = fopen(va("%ssdlpal.cfg", PAL_CONFIG_PREFIX), "w");
 
 	if (fp)
 	{
-		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_DOS), !gConfig.fIsWIN95); fputs(buf, fp);
 #if SDL_VERSION_ATLEAST(2,0,0)
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_KEEPASPECTRATIO), gConfig.fKeepAspectRatio); fputs(buf, fp);
-#else
-		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_FULLSCREEN), gConfig.fKeepAspectRatio); fputs(buf, fp);
 #endif
+		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_FULLSCREEN), gConfig.fFullScreen); fputs(buf, fp);
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_LAUNCHSETTING), gConfig.fLaunchSetting); fputs(buf, fp);
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_STEREO), gConfig.iAudioChannels == 2 ? TRUE : FALSE); fputs(buf, fp);
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_USEEMBEDDEDFONTS), gConfig.fUseEmbeddedFonts); fputs(buf, fp);
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_USESURROUNDOPL), gConfig.fUseSurroundOPL); fputs(buf, fp);
-#if PAL_HAS_TOUCH
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_USETOUCHOVERLAY), gConfig.fUseTouchOverlay); fputs(buf, fp);
-#endif
 
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_SURROUNDOPLOFFSET), gConfig.iSurroundOPLOffset); fputs(buf, fp);
 

+ 2 - 6
palcfg.h

@@ -37,8 +37,7 @@ typedef enum tagPALCFG_ITEM
 
 	PALCFG_BOOLEAN_MIN = PALCFG_ALL_MIN,
 	/* Booleans */
-	PALCFG_DOS = PALCFG_BOOLEAN_MIN,
-	PALCFG_FULLSCREEN,
+	PALCFG_FULLSCREEN = PALCFG_BOOLEAN_MIN,
 	PALCFG_KEEPASPECTRATIO,
 	PALCFG_LAUNCHSETTING,
 	PALCFG_STEREO,
@@ -178,15 +177,12 @@ typedef struct tagCONFIGURATION
 	BOOL             fUseSurroundOPL;
 #if SDL_VERSION_ATLEAST(2,0,0)
 	BOOL             fKeepAspectRatio;
-#else
-	BOOL             fFullScreen;
 #endif
+	BOOL             fFullScreen;
 	BOOL             fEnableJoyStick;
 	BOOL             fUseCustomScreenLayout;
 	BOOL             fLaunchSetting;
-#if PAL_HAS_TOUCH
 	BOOL             fUseTouchOverlay;
-#endif
 #if USE_RIX_EXTRA_INIT
 	uint32_t        *pExtraFMRegs;
 	uint8_t         *pExtraFMVals;

+ 1 - 12
play.c

@@ -574,18 +574,7 @@ PAL_StartFrame(
       //
       // Quit Game
       //
-      WORD wReturnValue = PAL_TripleMenu(SYSMENU_LABEL_LAUNCHSETTING);
-	  if (wReturnValue == 2)
-	  {
-		  gConfig.fLaunchSetting = TRUE;
-		  PAL_SaveConfig();
-	  }
-      if (wReturnValue == 1 || wReturnValue == 2)
-      {
-         SOUND_PlayMUS(0, FALSE, 2);
-         PAL_FadeOut(2);
-         PAL_Shutdown(0);
-      }
+      PAL_QuitGame();
    }
 
    if (--gpGlobals->wChasespeedChangeCycles == 0)

+ 3 - 10
sdlpal.cfg.example

@@ -4,14 +4,9 @@
 # Lines started with '#' is treated as comments.    #
 #####################################################
 
-# CodePage: Indicates the codepage to use, 0 for big5 (default), 1 for gbk,
-#           2 for shift-jis.
+# CodePage: Indicates the codepage to use, 0 for big5 (default), 1 for gbk.
 #CodePage=0
 
-# DOS: Indicates whether to use DOS-version resources or WIN-version resources.
-#      Non-zero for DOS-version (default), zero for WIN95-version.
-#DOS=1
-
 # UseEmbeddedFonts: Indicates whether to use DOS-version's embedded fonts.
 #                   Non-zero for using DOS-version's embedded fonts (default),
 #                   zero for using SDLPAL's internal fonts.
@@ -75,13 +70,11 @@
 #WindowWidth=640
 
 # WindowHeight: Indicates the height of game window. Default value varies on different
-#               platforms. On desktop, the default value is 400 for non-fullsceen mode,
-#               and 480 for full-screen mode.
+#               platforms. On desktop, the default value is 400.
 #WindowHeight=400
 
 # FullScreen: Indicates whether the game should started fullscreen or not, default is not.
-#             Currently only valid when the game is built with SDL 1.2 builds. If the game
-#             is built with SDL 2.0 or higher, this value is ignored.
+#             On some platforms, such as mobile OS or WinRT, this option is ignored.
 #FullScreen=0
 
 # KeepAspectRatio: Indicates whether the content in game window should keep its original

+ 20 - 15
uigame.c

@@ -261,7 +261,7 @@ PAL_SelectionMenu(
 		(nWords >= 3 && wItems[2]) ? PAL_WordWidth(wItems[2]) : 1,
 		(nWords >= 4 && wItems[3]) ? PAL_WordWidth(wItems[3]) : 1 };
 	int             dx[4] = { (w[0] - 1) * 16, (w[1] - 1) * 16, (w[2] - 1) * 16, (w[3] - 1) * 16 }, i;
-	PAL_POS         pos[4] = { PAL_XY(145, 110), PAL_XY(220 + dx[0], 110), PAL_XY(145, 150), PAL_XY(220 + dx[2], 150) };
+	PAL_POS         pos[4] = { PAL_XY(145, 110), PAL_XY(220 + dx[0], 110), PAL_XY(145, 160), PAL_XY(220 + dx[2], 160) };
 	WORD            wReturnValue;
 
 	const SDL_Rect  rect = { 130, 100, 125 + max(dx[0] + dx[1], dx[2] + dx[3]), 100 };
@@ -287,7 +287,7 @@ PAL_SelectionMenu(
 	dx[1] = dx[0]; dx[3] = dx[2]; dx[0] = dx[2] = 0;
 	for (i = 0; i < nWords; i++)
 	{
-		rgpBox[i] = PAL_CreateSingleLineBox(PAL_XY(130 + 75 * (i % 2) + dx[i], 100 + 40 * (i / 2)), w[i] + 1, TRUE);
+		rgpBox[i] = PAL_CreateSingleLineBox(PAL_XY(130 + 75 * (i % 2) + dx[i], 100 + 50 * (i / 2)), w[i] + 1, TRUE);
 	}
 
 	VIDEO_UpdateScreen(&rect);
@@ -641,21 +641,10 @@ PAL_SystemMenu(
       break;
 
    case 5:
-	   //
+      //
       // Quit
       //
-      wReturnValue = PAL_TripleMenu(SYSMENU_LABEL_LAUNCHSETTING);
-	  if (wReturnValue == 2)
-	  {
-		  gConfig.fLaunchSetting = TRUE;
-		  PAL_SaveConfig();
-	  }
-	  if (wReturnValue == 1 || wReturnValue == 2)
-      {
-         SOUND_PlayMUS(0, FALSE, 2);
-         PAL_FadeOut(2);
-         PAL_Shutdown(0);
-      }
+      PAL_QuitGame();
       break;
 
 #if !defined(PAL_CLASSIC)
@@ -2000,3 +1989,19 @@ PAL_EquipItemMenu(
       }
    }
 }
+
+VOID
+PAL_QuitGame(
+   VOID
+)
+{
+	WORD wReturnValue = PAL_TripleMenu(SYSMENU_LABEL_LAUNCHSETTING);
+	if (wReturnValue == 1 || wReturnValue == 2)
+	{
+		if (wReturnValue == 2) gConfig.fLaunchSetting = TRUE;
+		PAL_SaveConfig();		// Keep the fullscreen state
+		SOUND_PlayMUS(0, FALSE, 2);
+		PAL_FadeOut(2);
+		PAL_Shutdown(0);
+	}
+}

+ 5 - 0
uigame.h

@@ -96,6 +96,11 @@ PAL_EquipItemMenu(
    WORD           wItem
 );
 
+VOID
+PAL_QuitGame(
+   VOID
+);
+
 #ifdef __cplusplus
 }
 #endif

+ 30 - 67
video.c

@@ -31,9 +31,7 @@ SDL_Surface              *gpScreenBak        = NULL;
 SDL_Window               *gpWindow           = NULL;
 static SDL_Renderer      *gpRenderer         = NULL;
 static SDL_Texture       *gpTexture          = NULL;
-# if PAL_HAS_TOUCH
 static SDL_Texture       *gpTouchOverlay     = NULL;
-# endif
 static SDL_Rect           gOverlayRect;
 static SDL_Rect           gTextureRect;
 #endif
@@ -88,9 +86,7 @@ static SDL_Texture *VIDEO_CreateTexture(int width, int height)
 		gTextureRect.x = (texture_width - 320) / 2;
 		gTextureRect.y = (texture_height - 200) / 2;
 		gTextureRect.w = 320; gTextureRect.h = 200;
-# if PAL_HAS_TOUCH
 		PAL_SetTouchBounds(width, height, gOverlayRect);
-# endif
 	}
 	else
 	{
@@ -207,7 +203,6 @@ VIDEO_Startup(
    //
    // Create texture for overlay.
    //
-#if PAL_HAS_TOUCH
    if (gConfig.fUseTouchOverlay)
    {
       extern const void * PAL_LoadOverlayBMP(void);
@@ -222,34 +217,6 @@ VIDEO_Startup(
          SDL_FreeSurface(overlay);
       }
    }
-#endif
-
-   //
-   // Check whether to keep the aspect ratio
-   //
-//   if (gConfig.fKeepAspectRatio)
-//   {
-//	   float ax = (float)gConfig.dwScreenWidth / 320.0f;
-//	   float ay = (float)gConfig.dwScreenHeight / 200.0f;
-//	   if (ax != ay)
-//	   {
-//		   float ratio = (ax > ay) ? ay : ax;
-//		   WORD w = (WORD)(ratio * 320.0f);
-//		   WORD h = (WORD)(ratio * 200.0f);
-//		   if (w % 4 != 0) w &= ~0x3;
-//		   if (h % 4 != 0) h &= ~0x3;
-//		   gOverlayRect.x = (gConfig.dwScreenWidth - w) / 2;
-//		   gOverlayRect.y = (gConfig.dwScreenHeight - h) / 2;
-//		   gOverlayRect.w = w;
-//		   gOverlayRect.h = h;
-//		   gpRenderRect = &gOverlayRect;
-//# if PAL_HAS_TOUCH
-//		   PAL_SetTouchBounds(gConfig.dwScreenWidth, gConfig.dwScreenHeight, gOverlayRect);
-//# endif
-//	   }
-//   }
-//   else
-//	   gpRenderRect = NULL;
 #else
 
    //
@@ -351,13 +318,11 @@ VIDEO_Shutdown(
 
 #if SDL_VERSION_ATLEAST(2,0,0)
 
-# if PAL_HAS_TOUCH
    if (gpTouchOverlay)
    {
       SDL_DestroyTexture(gpTouchOverlay);
    }
    gpTouchOverlay = NULL;
-# endif
 
    if (gpTexture)
    {
@@ -395,8 +360,8 @@ VIDEO_RenderCopy(
 {
 	void *texture_pixels;
 	int texture_pitch;
-	SDL_LockTexture(gpTexture, NULL, &texture_pixels, &texture_pitch);
 
+	SDL_LockTexture(gpTexture, NULL, &texture_pixels, &texture_pitch);
 	memset(texture_pixels, 0, gTextureRect.y * texture_pitch);
 	uint8_t *pixels = (uint8_t *)texture_pixels + gTextureRect.y * texture_pitch;
 	uint8_t *src = (uint8_t *)gpScreenReal->pixels;
@@ -409,17 +374,14 @@ VIDEO_RenderCopy(
 		memset(pixels, 0, right_pitch); pixels += right_pitch;
 	}
 	memset(pixels, 0, gTextureRect.y * texture_pitch);
-	//SDL_UpdateTexture(gpTexture, NULL, gpScreenReal->pixels, gpScreenReal->pitch);
 	SDL_UnlockTexture(gpTexture);
 
 	SDL_RenderCopy(gpRenderer, gpTexture, NULL, NULL);
-#if PAL_HAS_TOUCH
 	if (gpTouchOverlay)
 	{
 		SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, &gOverlayRect);
 	}
-#endif
-	   SDL_RenderPresent(gpRenderer);
+	SDL_RenderPresent(gpRenderer);
 }
 #endif
 
@@ -755,7 +717,16 @@ VIDEO_ToggleFullscreen(
 --*/
 {
 #if SDL_VERSION_ATLEAST(2,0,0)
-   // TODO
+	if (gConfig.fFullScreen)
+	{
+		SDL_SetWindowFullscreen(gpWindow, 0);
+		gConfig.fFullScreen = FALSE;
+	}
+	else
+	{
+		SDL_SetWindowFullscreen(gpWindow, SDL_WINDOW_FULLSCREEN_DESKTOP);
+		gConfig.fFullScreen = TRUE;
+	}
 #else
    DWORD                    flags;
    PAL_LARGE SDL_Color      palette[256];
@@ -841,34 +812,26 @@ VIDEO_SaveScreenshot(
 
 --*/
 {
-   int      iNumBMP = 0;
-   FILE    *fp;
-
-   //
-   // Find a usable BMP filename.
-   //
-   for (iNumBMP = 0; iNumBMP <= 9999; iNumBMP++)
-   {
-      fp = fopen(va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP), "rb");
-      if (fp == NULL)
-      {
-         break;
-      }
-      fclose(fp);
-   }
-
-   if (iNumBMP > 9999)
-   {
-      return;
-   }
-
-   //
-   // Save the screenshot.
-   //
+	char filename[1024];
+#ifdef _WIN32
+	SYSTEMTIME st;
+	GetLocalTime(&st);
+	sprintf(filename, "%s%04d%02d%02d%02d%02d%02d%03d.bmp", PAL_SCREENSHOT_PREFIX, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
+#else
+	struct timeval tv;
+	struct tm *ptm;
+	gettimeofday(&tv, NULL);
+	ptm = localtime(&tv.tv_sec);
+	sprintf(filename, "%s%04d%02d%02d%02d%02d%02d%03d.bmp", PAL_SCREENSHOT_PREFIX, ptm->tm_year + 1900, ptm->tm_mon, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, tv.tv_usec / 1000);
+#endif
+	
+	//
+	// Save the screenshot.
+	//
 #if SDL_VERSION_ATLEAST(2,0,0)
-   SDL_SaveBMP(gpScreen, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
+	SDL_SaveBMP(gpScreen, filename);
 #else
-   SDL_SaveBMP(gpScreenReal, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
+	SDL_SaveBMP(gpScreenReal, filename);
 #endif
 }
 

+ 2 - 3
win32/resource.h

@@ -4,11 +4,8 @@
 //
 #define IDI_SDLPAL                      101
 #define IDD_LAUNCHER                    101
-#define IDS_LAUNCHSETTING               102
 #define IDS_CONFIRM                     103
 #define IDC_GAMEPATH                    1000
-#define IDC_DOS                         1002
-#define IDC_WIN95                       1003
 #define IDC_CHT                         1005
 #define IDC_CHS                         1006
 #define IDC_EMBEDFONT                   1009
@@ -16,6 +13,8 @@
 #define IDC_HEIGHT                      1013
 #define IDC_ASPECTRATIO                 1014
 #define IDC_FULLSCREEN                  1015
+#define IDC_FULLSCREEN2                 1016
+#define IDC_TOUCHOVERLAY                1016
 #define IDC_MSGFILE                     1017
 #define IDC_CD                          1019
 #define IDC_BGM                         1020

+ 9 - 15
win32/sdlpal.rc

@@ -35,9 +35,7 @@ BEGIN
     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,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
+    GROUPBOX        "Game Language",IDC_STATIC,7,28,192,64
     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
@@ -48,7 +46,7 @@ BEGIN
     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
+    CONTROL         "&Full screen",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,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
@@ -74,6 +72,7 @@ BEGIN
     EDITTEXT        IDC_AUDIOBUFFER,343,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "&Browse",IDC_BRGAME,348,7,50,14
     LTEXT           "Message file:",IDC_STATIC,14,76,43,8
+    CONTROL         "Enable &touch overlay",IDC_TOUCHOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,60,83,10
 END
 
 
@@ -141,7 +140,6 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_LAUNCHSETTING       "Launch setting dialog on next game start?"
     IDS_CONFIRM             "Confirm"
 END
 
@@ -177,9 +175,7 @@ BEGIN
     LTEXT           "游戏资源目录:",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,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
+    GROUPBOX        "游戏语言设置",IDC_STATIC,7,28,192,64
     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
@@ -190,7 +186,7 @@ BEGIN
     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
+    CONTROL         "全屏启动游戏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,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
@@ -216,6 +212,7 @@ BEGIN
     EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "浏览(&B)",IDC_BRGAME,348,7,50,14
     LTEXT           "语言文件:",IDC_STATIC,14,76,41,8
+    CONTROL         "启用触屏辅助(&T)",IDC_TOUCHOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,60,73,10
 END
 
 
@@ -358,7 +355,6 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_LAUNCHSETTING       "下次启动时还要进入设置界面吗?"
     IDS_CONFIRM             "确认"
 END
 
@@ -394,9 +390,7 @@ BEGIN
     LTEXT           "笴栏戈方郎Ж�",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,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
+    GROUPBOX        "笴栏粂ē砞﹚",IDC_STATIC,7,28,192,64
     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
@@ -407,7 +401,7 @@ BEGIN
     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
+    CONTROL         "��币笆笴栏(&F)",IDC_FULLSCREEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,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
@@ -433,6 +427,7 @@ BEGIN
     EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "聅凝(&B)",IDC_BRGAME,348,7,50,14
     LTEXT           "粂ē郎�",IDC_STATIC,14,76,33,8
+    CONTROL         "币ノ牟�徊�(&T)",IDC_TOUCHOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,60,73,10
 END
 
 
@@ -500,7 +495,6 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_LAUNCHSETTING       "�Ω币笆�临璶秈�砞﹚ざ�盾�"
     IDS_CONFIRM             "絋粄"
 END
 

+ 8 - 32
win32/win32.cpp

@@ -74,7 +74,7 @@ void SaveSettings(HWND hwndDlg, BOOL fWriteFile)
 {
 	int textLen;
 
-	if (IsDlgButtonChecked(hwndDlg, IDC_CHS) && gConfig.fIsWIN95)
+	if (IsDlgButtonChecked(hwndDlg, IDC_CHS))
 		gConfig.uCodePage = CP_GBK;
 	else
 		gConfig.uCodePage = CP_BIG5;
@@ -98,8 +98,9 @@ void SaveSettings(HWND hwndDlg, BOOL fWriteFile)
 		free(gConfig.pszGamePath); gConfig.pszGamePath = nullptr;
 	}
 
-	gConfig.fIsWIN95 = !IsDlgButtonChecked(hwndDlg, IDC_DOS);
-	gConfig.fUseEmbeddedFonts = !gConfig.fIsWIN95 && IsDlgButtonChecked(hwndDlg, IDC_EMBEDFONT);
+	gConfig.fFullScreen = IsDlgButtonChecked(hwndDlg, IDC_FULLSCREEN);
+	gConfig.fUseTouchOverlay = IsDlgButtonChecked(hwndDlg, IDC_TOUCHOVERLAY);
+	gConfig.fUseEmbeddedFonts = IsDlgButtonChecked(hwndDlg, IDC_EMBEDFONT);
 	gConfig.fKeepAspectRatio = IsDlgButtonChecked(hwndDlg, IDC_ASPECTRATIO);
 	gConfig.dwScreenWidth = GetDlgItemInt(hwndDlg, IDC_WIDTH, nullptr, FALSE);
 	gConfig.dwScreenHeight = GetDlgItemInt(hwndDlg, IDC_HEIGHT, nullptr, FALSE);
@@ -125,17 +126,16 @@ void ResetControls(HWND hwndDlg)
 {
 	TCHAR buffer[100];
 
-	EnableDlgItem(hwndDlg, IDC_CHS, gConfig.fIsWIN95);
-	EnableDlgItem(hwndDlg, IDC_EMBEDFONT, !gConfig.fIsWIN95);
 	EnableDlgItem(hwndDlg, IDC_MSGFILE, gConfig.pszMsgFile ? TRUE : FALSE);
 	EnableDlgItem(hwndDlg, IDC_OPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_SURROUNDOPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPLOFFSET, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPLSR, gConfig.eMusicType == MUSIC_RIX);
 
-	CheckRadioButton(hwndDlg, IDC_DOS, IDC_WIN95, gConfig.fIsWIN95 ? IDC_WIN95 : IDC_DOS);
 	CheckRadioButton(hwndDlg, IDC_CHT, IDC_CHS, IDC_CHT + gConfig.uCodePage);
 
+	CheckDlgButton(hwndDlg, IDC_FULLSCREEN, gConfig.fFullScreen);
+	CheckDlgButton(hwndDlg, IDC_TOUCHOVERLAY, gConfig.fUseTouchOverlay);
 	CheckDlgButton(hwndDlg, IDC_EMBEDFONT, gConfig.fUseEmbeddedFonts);
 	CheckDlgButton(hwndDlg, IDC_ASPECTRATIO, gConfig.fKeepAspectRatio);
 	CheckDlgButton(hwndDlg, IDC_SURROUNDOPL, gConfig.fUseSurroundOPL);
@@ -196,21 +196,11 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 	switch (idControl)
 	{
 	case IDOK:
-	{
-		TCHAR title[40], message[160];
-
-		LoadStringEx(g_hInstance, IDS_CONFIRM, g_wLanguage, title, 40);
-		LoadStringEx(g_hInstance, IDS_LAUNCHSETTING, g_wLanguage, message, 160);
-
-		if (MessageBox(hwndDlg, message, title, MB_YESNO) == IDYES)
-			gConfig.fLaunchSetting = TRUE;
-		else
-			gConfig.fLaunchSetting = FALSE;
-
+		gConfig.fLaunchSetting = FALSE;
 		SaveSettings(hwndDlg, TRUE);
 		EndDialog(hwndDlg, IDOK);
 		return TRUE;
-	}
+
 	case IDCANCEL:
 		EndDialog(hwndDlg, IDCANCEL);
 		return TRUE;
@@ -220,20 +210,6 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 		ResetControls(hwndDlg);
 		return TRUE;
 
-	case IDC_DOS:
-	case IDC_WIN95:
-		if (IsDlgButtonChecked(hwndDlg, IDC_DOS))
-		{
-			EnableDlgItem(hwndDlg, IDC_EMBEDFONT, TRUE);
-			EnableDlgItem(hwndDlg, IDC_CHS, FALSE);
-		}
-		else
-		{
-			EnableDlgItem(hwndDlg, IDC_EMBEDFONT, FALSE);
-			EnableDlgItem(hwndDlg, IDC_CHS, TRUE);
-		}
-		return TRUE;
-
 	case IDC_BRGAME:
 	{
 		TCHAR szName[MAX_PATH * 2], szTitle[200];

+ 1 - 2
winrt/SDLPal.Common/MainPage.xaml

@@ -5,7 +5,7 @@
     xmlns:local="using:SDLPal"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    mc:Ignorable="d">
+    mc:Ignorable="d" Loaded="Page_Loaded">
 
     <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
         <ScrollViewer HorizontalScrollMode="Disabled">
@@ -14,7 +14,6 @@
                 <TextBlock x:Uid="Title" Text="设置模式" FontSize="28" VerticalAlignment="Center" />
                 <TextBox x:Name="tbGamePath" x:Uid="GamePath" TextWrapping="Wrap" VerticalAlignment="Top" Header="游戏资源文件夹" IsReadOnly="True" PlaceholderText="未选择游戏资源文件夹"/>
                 <Button x:Name="btnBrowseGame" x:Uid="ButtonBrowse" Content="浏览文件夹" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnBrowse_Click" />
-                <ToggleSwitch x:Name="tsIsDOS" x:Uid="DOS" Header="游戏资源版本" OffContent="WIN95" OnContent="DOS" Toggled="tsIsDOS_Toggled" />
                 <ToggleSwitch x:Name="tsUseEmbedFont" x:Uid="EmbeddedFont" Header="使用游戏资源内置字体" OffContent="否" OnContent="是" />
                 <ToggleSwitch x:Name="tsLanguage" x:Uid="Language" Header="游戏资源语言" OffContent="繁体中文" OnContent="简体中文" />
                 <TextBox x:Name="tbMsgFile" x:Uid="MessageFile" Header="自定义语言文件" TextWrapping="Wrap" VerticalAlignment="Top" PlaceholderText="无自定义语言文件" IsReadOnly="True"/>

+ 16 - 26
winrt/SDLPal.Common/MainPage.xaml.cpp

@@ -28,12 +28,13 @@ MainPage::MainPage()
 	InitializeComponent();
 	LoadControlContents();
 
+	m_resLdr = Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView();
 	auto app = static_cast<App^>(Application::Current);
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 	app->Page = this;
 #endif
 	if (app->LastCrashed)
-		(ref new Windows::UI::Popups::MessageDialog((ref new Windows::ApplicationModel::Resources::ResourceLoader())->GetString("MBCrashContent")))->ShowAsync();
+		(ref new Windows::UI::Popups::MessageDialog(m_resLdr->GetString("MBCrashContent")))->ShowAsync();
 }
 
 void SDLPal::MainPage::LoadControlContents()
@@ -42,7 +43,6 @@ void SDLPal::MainPage::LoadControlContents()
 	if (gConfig.pszMsgFile) tbMsgFile->Text = ConvertString(gConfig.pszMsgFile);
 
 	tsLanguage->IsOn = (gConfig.uCodePage == CP_GBK);
-	tsIsDOS->IsOn = (gConfig.fIsWIN95 == FALSE);
 	tsUseEmbedFont->IsOn = (gConfig.fUseEmbeddedFonts == TRUE);
 	tsKeepAspect->IsOn = (gConfig.fKeepAspectRatio == TRUE);
 	tsStereo->IsOn = (gConfig.iAudioChannels == 2);
@@ -82,8 +82,6 @@ void SDLPal::MainPage::LoadControlContents()
 		cbOPLSR->SelectedIndex = 1;
 	else
 		cbOPLSR->SelectedIndex = 2;
-
-	tsUseEmbedFont->Visibility = tsIsDOS->IsOn ? Windows::UI::Xaml::Visibility::Visible : Windows::UI::Xaml::Visibility::Collapsed;
 }
 
 void SDLPal::MainPage::SaveControlContents()
@@ -98,7 +96,6 @@ void SDLPal::MainPage::SaveControlContents()
 	if (gConfig.pszMsgFile) { free(gConfig.pszMsgFile); gConfig.pszMsgFile = NULL; }
 	gConfig.pszMsgFile = (tbMsgFile->Text->Length() > 0) ? strdup(ConvertString(tbMsgFile->Text).c_str()) : nullptr;
 
-	gConfig.fIsWIN95 = tsIsDOS->IsOn ? FALSE : TRUE;
 	gConfig.fUseEmbeddedFonts = tsUseEmbedFont->IsOn ? TRUE : FALSE;
 	gConfig.fKeepAspectRatio = tsKeepAspect->IsOn ? TRUE : FALSE;
 	gConfig.iAudioChannels = tsStereo->IsOn ? 2 : 1;
@@ -118,22 +115,6 @@ void SDLPal::MainPage::SaveControlContents()
 	gConfig.wAudioBufferSize = wcstoul(static_cast<Platform::String^>(static_cast<ComboBoxItem^>(cbAudioBuffer->SelectedItem)->Content)->Data(), nullptr, 10);
 }
 
-void SDLPal::MainPage::tsIsDOS_Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-	if (tsIsDOS->IsOn)
-	{
-		tsLanguage->IsOn = false;
-		tsLanguage->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-		tsUseEmbedFont->Visibility = Windows::UI::Xaml::Visibility::Visible;
-	}
-	else
-	{
-		tsLanguage->IsOn = (gConfig.uCodePage == CP_GBK);
-		tsLanguage->Visibility = Windows::UI::Xaml::Visibility::Visible;
-		tsUseEmbedFont->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
-	}
-}
-
 void SDLPal::MainPage::cbBGM_SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
 {
 	auto visibility = (cbBGM->SelectedIndex == 0) ? Windows::UI::Xaml::Visibility::Visible : Windows::UI::Xaml::Visibility::Collapsed;
@@ -151,7 +132,6 @@ void SDLPal::MainPage::btnReset_Click(Platform::Object^ sender, Windows::UI::Xam
 
 void SDLPal::MainPage::btnFinish_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
-	auto loader = ref new Windows::ApplicationModel::Resources::ResourceLoader();
 	if (tbGamePath->Text->Length() > 0)
 	{
 		auto mru_list = Windows::Storage::AccessCache::StorageApplicationPermissions::MostRecentlyUsedList;
@@ -162,15 +142,15 @@ void SDLPal::MainPage::btnFinish_Click(Platform::Object^ sender, Windows::UI::Xa
 		gConfig.fLaunchSetting = FALSE;
 		PAL_SaveConfig();
 
-		auto dlg = ref new Windows::UI::Popups::MessageDialog(loader->GetString("MBExitContent"));
-		dlg->Title = loader->GetString("MBExitTitle");
+		auto dlg = ref new Windows::UI::Popups::MessageDialog(m_resLdr->GetString("MBExitContent"));
+		dlg->Title = m_resLdr->GetString("MBExitTitle");
 		concurrency::create_task(dlg->ShowAsync()).then([] (Windows::UI::Popups::IUICommand^ command) {
 			Application::Current->Exit();
 		});
 	}
 	else
 	{
-		(ref new Windows::UI::Popups::MessageDialog(loader->GetString("MBEmptyContent")))->ShowAsync();
+		(ref new Windows::UI::Popups::MessageDialog(m_resLdr->GetString("MBEmptyContent")))->ShowAsync();
 	}
 }
 
@@ -213,10 +193,20 @@ void SDLPal::MainPage::btnBrowseFile_Click(Platform::Object^ sender, Windows::UI
 {
 	auto picker = ref new Windows::Storage::Pickers::FileOpenPicker();
 	picker->FileTypeFilter->Append("*");
-	picker->ViewMode = Windows::Storage::Pickers::PickerViewMode::List;
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 	picker->PickSingleFileAndContinue();
 #else
 	concurrency::create_task(picker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file) { SetFile(file); });
 #endif
 }
+
+void SDLPal::MainPage::Page_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+#if NTDDI_VERSION >= NTDDI_WIN10
+	if (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.UI.ViewManagement.StatusBar")) return;
+#endif
+#if NTDDI_VERSION >= NTDDI_WIN10 || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+	auto statusBar = Windows::UI::ViewManagement::StatusBar::GetForCurrentView();
+	concurrency::create_task(statusBar->ShowAsync()).then([statusBar]() { statusBar->BackgroundOpacity = 1.0; });
+#endif
+}

+ 3 - 1
winrt/SDLPal.Common/MainPage.xaml.h

@@ -25,12 +25,14 @@ namespace SDLPal
 		void SaveControlContents();
 
 	private:
+		Windows::ApplicationModel::Resources::ResourceLoader^ m_resLdr;
+
 		void btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
-		void tsIsDOS_Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void cbBGM_SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);
 		void btnReset_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnFinish_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnBrowseFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnClearFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
+		void Page_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 	};
 }

File diff suppressed because it is too large
+ 9 - 0
winrt/SDLPal.UWP/SDLPal.UWP.vcxproj