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
 #define PAL_DEFAULT_FULLSCREEN_HEIGHT 480
 
 
 # if SDL_VERSION_ATLEAST(2,0,0)
 # 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
 # else
 #  define PAL_VIDEO_INIT_FLAGS  (SDL_HWSURFACE | SDL_RESIZABLE | (gConfig.fFullScreen ? SDL_FULLSCREEN : 0))
 #  define PAL_VIDEO_INIT_FLAGS  (SDL_HWSURFACE | SDL_RESIZABLE | (gConfig.fFullScreen ? SDL_FULLSCREEN : 0))
 # endif
 # endif

+ 13 - 6
fight.c

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

+ 71 - 5
global.c

@@ -49,6 +49,67 @@ CONFIGURATION gConfig;
       DO_BYTESWAP(buf, size);                                    \
       DO_BYTESWAP(buf, size);                                    \
    } while(0)
    } 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
 INT
 PAL_InitGlobals(
 PAL_InitGlobals(
    VOID
    VOID
@@ -68,11 +129,6 @@ PAL_InitGlobals(
 
 
 --*/
 --*/
 {
 {
-   //
-   // Set decompress function
-   //
-   Decompress = gConfig.fIsWIN95 ? YJ2_Decompress : YJ1_Decompress;
-
    //
    //
    // Open files
    // Open files
    //
    //
@@ -85,6 +141,16 @@ PAL_InitGlobals(
    gpGlobals->f.fpRGM = UTIL_OpenRequiredFile("rgm.mkf");
    gpGlobals->f.fpRGM = UTIL_OpenRequiredFile("rgm.mkf");
    gpGlobals->f.fpSSS = UTIL_OpenRequiredFile("sss.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->lpObjectDesc = gConfig.fIsWIN95 ? NULL : PAL_LoadObjectDesc(va("%s%s", gConfig.pszGamePath, "desc.dat"));
    gpGlobals->bCurrentSaveSlot = 1;
    gpGlobals->bCurrentSaveSlot = 1;
 
 

+ 6 - 1
global.h

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

+ 0 - 4
input.c

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

+ 0 - 2
input.h

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

+ 1 - 1
main.c

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

+ 0 - 4
overlay.c

@@ -1,7 +1,5 @@
 #include "common.h"
 #include "common.h"
 
 
-#if PAL_HAS_TOUCH
-
 const static uint32_t bmp_count[] = {
 const static uint32_t bmp_count[] = {
 	0x000cd604,0x0002453a,0x0002423d,0x00023f3f,0x00023d43,0x00023c43,0x00023b45,0x00023b45,0x00023946,0x00019f47,0x00008b0f,0x00019c47,0x00008815,0x00013847,0x00005d04,0x0000851b,
 	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,
 	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;
 	return bmp;
 }
 }
-
-#endif

+ 10 - 14
palcfg.c

@@ -5,15 +5,18 @@
 #include "resampler.h"
 #include "resampler.h"
 #include <stdint.h>
 #include <stdint.h>
 
 
+#if !defined(PAL_HAS_TOUCH)
+#define PAL_HAS_TOUCH     0
+#endif
+
 static const ConfigItem gConfigItems[PALCFG_ALL_MAX] = {
 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_FULLSCREEN,        PALCFG_BOOLEAN,  "FULLSCREEN",        10, FALSE, FALSE, TRUE },
 	{ PALCFG_KEEPASPECTRATIO,   PALCFG_BOOLEAN,  "KEEPASPECTRATIO",   15, TRUE,  FALSE, TRUE },
 	{ PALCFG_KEEPASPECTRATIO,   PALCFG_BOOLEAN,  "KEEPASPECTRATIO",   15, TRUE,  FALSE, TRUE },
 	{ PALCFG_LAUNCHSETTING,     PALCFG_BOOLEAN,  "LAUNCHSETTING",     13, 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_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_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_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 },
 	{ 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.dwWordLength = 10;	// This is the default value for Chinese version
 	gConfig.ScreenLayout = screen_layout;
 	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.fUseSurroundOPL = values[PALCFG_STEREO].bValue && values[PALCFG_USESURROUNDOPL].bValue;
 	gConfig.fLaunchSetting = values[PALCFG_LAUNCHSETTING].bValue;
 	gConfig.fLaunchSetting = values[PALCFG_LAUNCHSETTING].bValue;
-#if PAL_HAS_TOUCH
 	gConfig.fUseTouchOverlay = values[PALCFG_USETOUCHOVERLAY].bValue;
 	gConfig.fUseTouchOverlay = values[PALCFG_USETOUCHOVERLAY].bValue;
-#endif
 #if SDL_VERSION_ATLEAST(2,0,0)
 #if SDL_VERSION_ATLEAST(2,0,0)
 	gConfig.fKeepAspectRatio = values[PALCFG_KEEPASPECTRATIO].bValue;
 	gConfig.fKeepAspectRatio = values[PALCFG_KEEPASPECTRATIO].bValue;
-#else
-	gConfig.fFullScreen = values[PALCFG_FULLSCREEN].bValue;
 #endif
 #endif
+	gConfig.fFullScreen = values[PALCFG_FULLSCREEN].bValue;
 	gConfig.iAudioChannels = values[PALCFG_STEREO].bValue ? 2 : 1;
 	gConfig.iAudioChannels = values[PALCFG_STEREO].bValue ? 2 : 1;
 
 
 	gConfig.iSurroundOPLOffset = values[PALCFG_SURROUNDOPLOFFSET].iValue;
 	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 *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];
 	char buf[512];
 	FILE *fp = fopen(va("%ssdlpal.cfg", PAL_CONFIG_PREFIX), "w");
 	FILE *fp = fopen(va("%ssdlpal.cfg", PAL_CONFIG_PREFIX), "w");
 
 
 	if (fp)
 	if (fp)
 	{
 	{
-		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_DOS), !gConfig.fIsWIN95); fputs(buf, fp);
 #if SDL_VERSION_ATLEAST(2,0,0)
 #if SDL_VERSION_ATLEAST(2,0,0)
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_KEEPASPECTRATIO), gConfig.fKeepAspectRatio); fputs(buf, fp);
 		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
 #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_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_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_USEEMBEDDEDFONTS), gConfig.fUseEmbeddedFonts); fputs(buf, fp);
 		sprintf(buf, "%s=%d\n", PAL_ConfigName(PALCFG_USESURROUNDOPL), gConfig.fUseSurroundOPL); 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);
 		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);
 		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,
 	PALCFG_BOOLEAN_MIN = PALCFG_ALL_MIN,
 	/* Booleans */
 	/* Booleans */
-	PALCFG_DOS = PALCFG_BOOLEAN_MIN,
-	PALCFG_FULLSCREEN,
+	PALCFG_FULLSCREEN = PALCFG_BOOLEAN_MIN,
 	PALCFG_KEEPASPECTRATIO,
 	PALCFG_KEEPASPECTRATIO,
 	PALCFG_LAUNCHSETTING,
 	PALCFG_LAUNCHSETTING,
 	PALCFG_STEREO,
 	PALCFG_STEREO,
@@ -178,15 +177,12 @@ typedef struct tagCONFIGURATION
 	BOOL             fUseSurroundOPL;
 	BOOL             fUseSurroundOPL;
 #if SDL_VERSION_ATLEAST(2,0,0)
 #if SDL_VERSION_ATLEAST(2,0,0)
 	BOOL             fKeepAspectRatio;
 	BOOL             fKeepAspectRatio;
-#else
-	BOOL             fFullScreen;
 #endif
 #endif
+	BOOL             fFullScreen;
 	BOOL             fEnableJoyStick;
 	BOOL             fEnableJoyStick;
 	BOOL             fUseCustomScreenLayout;
 	BOOL             fUseCustomScreenLayout;
 	BOOL             fLaunchSetting;
 	BOOL             fLaunchSetting;
-#if PAL_HAS_TOUCH
 	BOOL             fUseTouchOverlay;
 	BOOL             fUseTouchOverlay;
-#endif
 #if USE_RIX_EXTRA_INIT
 #if USE_RIX_EXTRA_INIT
 	uint32_t        *pExtraFMRegs;
 	uint32_t        *pExtraFMRegs;
 	uint8_t         *pExtraFMVals;
 	uint8_t         *pExtraFMVals;

+ 1 - 12
play.c

@@ -574,18 +574,7 @@ PAL_StartFrame(
       //
       //
       // Quit Game
       // 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)
    if (--gpGlobals->wChasespeedChangeCycles == 0)

+ 3 - 10
sdlpal.cfg.example

@@ -4,14 +4,9 @@
 # Lines started with '#' is treated as comments.    #
 # 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
 #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.
 # UseEmbeddedFonts: Indicates whether to use DOS-version's embedded fonts.
 #                   Non-zero for using DOS-version's embedded fonts (default),
 #                   Non-zero for using DOS-version's embedded fonts (default),
 #                   zero for using SDLPAL's internal fonts.
 #                   zero for using SDLPAL's internal fonts.
@@ -75,13 +70,11 @@
 #WindowWidth=640
 #WindowWidth=640
 
 
 # WindowHeight: Indicates the height of game window. Default value varies on different
 # 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
 #WindowHeight=400
 
 
 # FullScreen: Indicates whether the game should started fullscreen or not, default is not.
 # 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
 #FullScreen=0
 
 
 # KeepAspectRatio: Indicates whether the content in game window should keep its original
 # 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 >= 3 && wItems[2]) ? PAL_WordWidth(wItems[2]) : 1,
 		(nWords >= 4 && wItems[3]) ? PAL_WordWidth(wItems[3]) : 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;
 	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;
 	WORD            wReturnValue;
 
 
 	const SDL_Rect  rect = { 130, 100, 125 + max(dx[0] + dx[1], dx[2] + dx[3]), 100 };
 	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;
 	dx[1] = dx[0]; dx[3] = dx[2]; dx[0] = dx[2] = 0;
 	for (i = 0; i < nWords; i++)
 	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);
 	VIDEO_UpdateScreen(&rect);
@@ -641,21 +641,10 @@ PAL_SystemMenu(
       break;
       break;
 
 
    case 5:
    case 5:
-	   //
+      //
       // Quit
       // 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;
       break;
 
 
 #if !defined(PAL_CLASSIC)
 #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
    WORD           wItem
 );
 );
 
 
+VOID
+PAL_QuitGame(
+   VOID
+);
+
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
 #endif
 #endif

+ 30 - 67
video.c

@@ -31,9 +31,7 @@ SDL_Surface              *gpScreenBak        = NULL;
 SDL_Window               *gpWindow           = NULL;
 SDL_Window               *gpWindow           = NULL;
 static SDL_Renderer      *gpRenderer         = NULL;
 static SDL_Renderer      *gpRenderer         = NULL;
 static SDL_Texture       *gpTexture          = NULL;
 static SDL_Texture       *gpTexture          = NULL;
-# if PAL_HAS_TOUCH
 static SDL_Texture       *gpTouchOverlay     = NULL;
 static SDL_Texture       *gpTouchOverlay     = NULL;
-# endif
 static SDL_Rect           gOverlayRect;
 static SDL_Rect           gOverlayRect;
 static SDL_Rect           gTextureRect;
 static SDL_Rect           gTextureRect;
 #endif
 #endif
@@ -88,9 +86,7 @@ static SDL_Texture *VIDEO_CreateTexture(int width, int height)
 		gTextureRect.x = (texture_width - 320) / 2;
 		gTextureRect.x = (texture_width - 320) / 2;
 		gTextureRect.y = (texture_height - 200) / 2;
 		gTextureRect.y = (texture_height - 200) / 2;
 		gTextureRect.w = 320; gTextureRect.h = 200;
 		gTextureRect.w = 320; gTextureRect.h = 200;
-# if PAL_HAS_TOUCH
 		PAL_SetTouchBounds(width, height, gOverlayRect);
 		PAL_SetTouchBounds(width, height, gOverlayRect);
-# endif
 	}
 	}
 	else
 	else
 	{
 	{
@@ -207,7 +203,6 @@ VIDEO_Startup(
    //
    //
    // Create texture for overlay.
    // Create texture for overlay.
    //
    //
-#if PAL_HAS_TOUCH
    if (gConfig.fUseTouchOverlay)
    if (gConfig.fUseTouchOverlay)
    {
    {
       extern const void * PAL_LoadOverlayBMP(void);
       extern const void * PAL_LoadOverlayBMP(void);
@@ -222,34 +217,6 @@ VIDEO_Startup(
          SDL_FreeSurface(overlay);
          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
 #else
 
 
    //
    //
@@ -351,13 +318,11 @@ VIDEO_Shutdown(
 
 
 #if SDL_VERSION_ATLEAST(2,0,0)
 #if SDL_VERSION_ATLEAST(2,0,0)
 
 
-# if PAL_HAS_TOUCH
    if (gpTouchOverlay)
    if (gpTouchOverlay)
    {
    {
       SDL_DestroyTexture(gpTouchOverlay);
       SDL_DestroyTexture(gpTouchOverlay);
    }
    }
    gpTouchOverlay = NULL;
    gpTouchOverlay = NULL;
-# endif
 
 
    if (gpTexture)
    if (gpTexture)
    {
    {
@@ -395,8 +360,8 @@ VIDEO_RenderCopy(
 {
 {
 	void *texture_pixels;
 	void *texture_pixels;
 	int texture_pitch;
 	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);
 	memset(texture_pixels, 0, gTextureRect.y * texture_pitch);
 	uint8_t *pixels = (uint8_t *)texture_pixels + gTextureRect.y * texture_pitch;
 	uint8_t *pixels = (uint8_t *)texture_pixels + gTextureRect.y * texture_pitch;
 	uint8_t *src = (uint8_t *)gpScreenReal->pixels;
 	uint8_t *src = (uint8_t *)gpScreenReal->pixels;
@@ -409,17 +374,14 @@ VIDEO_RenderCopy(
 		memset(pixels, 0, right_pitch); pixels += right_pitch;
 		memset(pixels, 0, right_pitch); pixels += right_pitch;
 	}
 	}
 	memset(pixels, 0, gTextureRect.y * texture_pitch);
 	memset(pixels, 0, gTextureRect.y * texture_pitch);
-	//SDL_UpdateTexture(gpTexture, NULL, gpScreenReal->pixels, gpScreenReal->pitch);
 	SDL_UnlockTexture(gpTexture);
 	SDL_UnlockTexture(gpTexture);
 
 
 	SDL_RenderCopy(gpRenderer, gpTexture, NULL, NULL);
 	SDL_RenderCopy(gpRenderer, gpTexture, NULL, NULL);
-#if PAL_HAS_TOUCH
 	if (gpTouchOverlay)
 	if (gpTouchOverlay)
 	{
 	{
 		SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, &gOverlayRect);
 		SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, &gOverlayRect);
 	}
 	}
-#endif
-	   SDL_RenderPresent(gpRenderer);
+	SDL_RenderPresent(gpRenderer);
 }
 }
 #endif
 #endif
 
 
@@ -755,7 +717,16 @@ VIDEO_ToggleFullscreen(
 --*/
 --*/
 {
 {
 #if SDL_VERSION_ATLEAST(2,0,0)
 #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
 #else
    DWORD                    flags;
    DWORD                    flags;
    PAL_LARGE SDL_Color      palette[256];
    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)
 #if SDL_VERSION_ATLEAST(2,0,0)
-   SDL_SaveBMP(gpScreen, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
+	SDL_SaveBMP(gpScreen, filename);
 #else
 #else
-   SDL_SaveBMP(gpScreenReal, va("%sscrn%.4d.bmp", PAL_SCREENSHOT_PREFIX, iNumBMP));
+	SDL_SaveBMP(gpScreenReal, filename);
 #endif
 #endif
 }
 }
 
 

+ 2 - 3
win32/resource.h

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

+ 9 - 15
win32/sdlpal.rc

@@ -35,9 +35,7 @@ BEGIN
     LTEXT           "Game resource path:",IDC_STATIC,14,10,68,8
     LTEXT           "Game resource path:",IDC_STATIC,14,10,68,8
     EDITTEXT        IDC_GAMEPATH,84,7,256,14,ES_AUTOHSCROLL | ES_READONLY
     EDITTEXT        IDC_GAMEPATH,84,7,256,14,ES_AUTOHSCROLL | ES_READONLY
     LTEXT           "CD source:",IDC_STATIC,14,114,36,8
     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         "&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         "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
     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
     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
     CONTROL         "&Keep aspect ratio",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,72,10
     LTEXT           "BGM source:",IDC_STATIC,115,114,41,8
     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
     EDITTEXT        IDC_MSGFILE,59,73,131,14,ES_AUTOHSCROLL
     GROUPBOX        "Audio",IDC_STATIC,7,100,391,78
     GROUPBOX        "Audio",IDC_STATIC,7,100,391,78
     COMBOBOX        IDC_CD,54,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     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
     EDITTEXT        IDC_AUDIOBUFFER,343,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "&Browse",IDC_BRGAME,348,7,50,14
     PUSHBUTTON      "&Browse",IDC_BRGAME,348,7,50,14
     LTEXT           "Message file:",IDC_STATIC,14,76,43,8
     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
 END
 
 
 
 
@@ -141,7 +140,6 @@ END
 
 
 STRINGTABLE
 STRINGTABLE
 BEGIN
 BEGIN
-    IDS_LAUNCHSETTING       "Launch setting dialog on next game start?"
     IDS_CONFIRM             "Confirm"
     IDS_CONFIRM             "Confirm"
 END
 END
 
 
@@ -177,9 +175,7 @@ BEGIN
     LTEXT           "游戏资源目录:",IDC_STATIC,14,10,57,8
     LTEXT           "游戏资源目录:",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
     LTEXT           "CD 音源:",IDC_STATIC,14,114,36,8
     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         "繁体中文(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,60,57,10
     CONTROL         "简体中文(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,60,58,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
     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
     EDITTEXT        IDC_HEIGHT,306,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
     CONTROL         "保持纵横比(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
     CONTROL         "保持纵横比(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
     LTEXT           "BGM 音源:",IDC_STATIC,115,114,41,8
     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
     EDITTEXT        IDC_MSGFILE,57,73,133,14,ES_AUTOHSCROLL
     GROUPBOX        "音频设置",IDC_STATIC,7,100,391,78
     GROUPBOX        "音频设置",IDC_STATIC,7,100,391,78
     COMBOBOX        IDC_CD,54,113,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     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
     EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "浏览(&B)",IDC_BRGAME,348,7,50,14
     PUSHBUTTON      "浏览(&B)",IDC_BRGAME,348,7,50,14
     LTEXT           "语言文件:",IDC_STATIC,14,76,41,8
     LTEXT           "语言文件:",IDC_STATIC,14,76,41,8
+    CONTROL         "启用触屏辅助(&T)",IDC_TOUCHOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,60,73,10
 END
 END
 
 
 
 
@@ -358,7 +355,6 @@ END
 
 
 STRINGTABLE
 STRINGTABLE
 BEGIN
 BEGIN
-    IDS_LAUNCHSETTING       "下次启动时还要进入设置界面吗?"
     IDS_CONFIRM             "确认"
     IDS_CONFIRM             "确认"
 END
 END
 
 
@@ -394,9 +390,7 @@ BEGIN
     LTEXT           "笴栏戈方郎Ж�",IDC_STATIC,14,10,57,8
     LTEXT           "笴栏戈方郎Ж�",IDC_STATIC,14,10,57,8
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
     EDITTEXT        IDC_GAMEPATH,71,7,270,14,ES_AUTOHSCROLL | ES_READONLY
     LTEXT           "CD �方�",IDC_STATIC,14,114,36,8
     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         "羉砰いゅ(&T)",IDC_CHT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,60,57,10
     CONTROL         "虏砰いゅ(&C)",IDC_CHS,"Button",BS_AUTORADIOBUTTON,102,60,58,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
     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
     EDITTEXT        IDC_HEIGHT,306,73,32,14,ES_AUTOHSCROLL | ES_NUMBER
     CONTROL         "玂�羇绢ゑ(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
     CONTROL         "玂�羇绢ゑ(&K)",IDC_ASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,215,60,65,10
     LTEXT           "BGM �方�",IDC_STATIC,115,114,41,8
     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
     EDITTEXT        IDC_MSGFILE,57,73,133,14,ES_AUTOHSCROLL
     GROUPBOX        "�癟砞﹚",IDC_STATIC,7,100,391,78
     GROUPBOX        "�癟砞﹚",IDC_STATIC,7,100,391,78
     COMBOBOX        IDC_CD,54,114,48,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     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
     EDITTEXT        IDC_AUDIOBUFFER,341,151,40,14,ES_AUTOHSCROLL | ES_NUMBER
     PUSHBUTTON      "聅凝(&B)",IDC_BRGAME,348,7,50,14
     PUSHBUTTON      "聅凝(&B)",IDC_BRGAME,348,7,50,14
     LTEXT           "粂ē郎�",IDC_STATIC,14,76,33,8
     LTEXT           "粂ē郎�",IDC_STATIC,14,76,33,8
+    CONTROL         "币ノ牟�徊�(&T)",IDC_TOUCHOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,310,60,73,10
 END
 END
 
 
 
 
@@ -500,7 +495,6 @@ END
 
 
 STRINGTABLE
 STRINGTABLE
 BEGIN
 BEGIN
-    IDS_LAUNCHSETTING       "�Ω币笆�临璶秈�砞﹚ざ�盾�"
     IDS_CONFIRM             "絋粄"
     IDS_CONFIRM             "絋粄"
 END
 END
 
 

+ 8 - 32
win32/win32.cpp

@@ -74,7 +74,7 @@ void SaveSettings(HWND hwndDlg, BOOL fWriteFile)
 {
 {
 	int textLen;
 	int textLen;
 
 
-	if (IsDlgButtonChecked(hwndDlg, IDC_CHS) && gConfig.fIsWIN95)
+	if (IsDlgButtonChecked(hwndDlg, IDC_CHS))
 		gConfig.uCodePage = CP_GBK;
 		gConfig.uCodePage = CP_GBK;
 	else
 	else
 		gConfig.uCodePage = CP_BIG5;
 		gConfig.uCodePage = CP_BIG5;
@@ -98,8 +98,9 @@ void SaveSettings(HWND hwndDlg, BOOL fWriteFile)
 		free(gConfig.pszGamePath); gConfig.pszGamePath = nullptr;
 		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.fKeepAspectRatio = IsDlgButtonChecked(hwndDlg, IDC_ASPECTRATIO);
 	gConfig.dwScreenWidth = GetDlgItemInt(hwndDlg, IDC_WIDTH, nullptr, FALSE);
 	gConfig.dwScreenWidth = GetDlgItemInt(hwndDlg, IDC_WIDTH, nullptr, FALSE);
 	gConfig.dwScreenHeight = GetDlgItemInt(hwndDlg, IDC_HEIGHT, nullptr, FALSE);
 	gConfig.dwScreenHeight = GetDlgItemInt(hwndDlg, IDC_HEIGHT, nullptr, FALSE);
@@ -125,17 +126,16 @@ void ResetControls(HWND hwndDlg)
 {
 {
 	TCHAR buffer[100];
 	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_MSGFILE, gConfig.pszMsgFile ? TRUE : FALSE);
 	EnableDlgItem(hwndDlg, IDC_OPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_SURROUNDOPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_SURROUNDOPL, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPLOFFSET, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPLOFFSET, gConfig.eMusicType == MUSIC_RIX);
 	EnableDlgItem(hwndDlg, IDC_OPLSR, 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);
 	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_EMBEDFONT, gConfig.fUseEmbeddedFonts);
 	CheckDlgButton(hwndDlg, IDC_ASPECTRATIO, gConfig.fKeepAspectRatio);
 	CheckDlgButton(hwndDlg, IDC_ASPECTRATIO, gConfig.fKeepAspectRatio);
 	CheckDlgButton(hwndDlg, IDC_SURROUNDOPL, gConfig.fUseSurroundOPL);
 	CheckDlgButton(hwndDlg, IDC_SURROUNDOPL, gConfig.fUseSurroundOPL);
@@ -196,21 +196,11 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 	switch (idControl)
 	switch (idControl)
 	{
 	{
 	case IDOK:
 	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);
 		SaveSettings(hwndDlg, TRUE);
 		EndDialog(hwndDlg, IDOK);
 		EndDialog(hwndDlg, IDOK);
 		return TRUE;
 		return TRUE;
-	}
+
 	case IDCANCEL:
 	case IDCANCEL:
 		EndDialog(hwndDlg, IDCANCEL);
 		EndDialog(hwndDlg, IDCANCEL);
 		return TRUE;
 		return TRUE;
@@ -220,20 +210,6 @@ INT_PTR ButtonProc(HWND hwndDlg, WORD idControl, HWND hwndCtrl)
 		ResetControls(hwndDlg);
 		ResetControls(hwndDlg);
 		return TRUE;
 		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:
 	case IDC_BRGAME:
 	{
 	{
 		TCHAR szName[MAX_PATH * 2], szTitle[200];
 		TCHAR szName[MAX_PATH * 2], szTitle[200];

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

@@ -5,7 +5,7 @@
     xmlns:local="using:SDLPal"
     xmlns:local="using:SDLPal"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    mc:Ignorable="d">
+    mc:Ignorable="d" Loaded="Page_Loaded">
 
 
     <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
     <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
         <ScrollViewer HorizontalScrollMode="Disabled">
         <ScrollViewer HorizontalScrollMode="Disabled">
@@ -14,7 +14,6 @@
                 <TextBlock x:Uid="Title" Text="设置模式" FontSize="28" VerticalAlignment="Center" />
                 <TextBlock x:Uid="Title" Text="设置模式" FontSize="28" VerticalAlignment="Center" />
                 <TextBox x:Name="tbGamePath" x:Uid="GamePath" TextWrapping="Wrap" VerticalAlignment="Top" Header="游戏资源文件夹" IsReadOnly="True" PlaceholderText="未选择游戏资源文件夹"/>
                 <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" />
                 <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="tsUseEmbedFont" x:Uid="EmbeddedFont" Header="使用游戏资源内置字体" OffContent="否" OnContent="是" />
                 <ToggleSwitch x:Name="tsLanguage" x:Uid="Language" 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"/>
                 <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();
 	InitializeComponent();
 	LoadControlContents();
 	LoadControlContents();
 
 
+	m_resLdr = Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView();
 	auto app = static_cast<App^>(Application::Current);
 	auto app = static_cast<App^>(Application::Current);
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 	app->Page = this;
 	app->Page = this;
 #endif
 #endif
 	if (app->LastCrashed)
 	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()
 void SDLPal::MainPage::LoadControlContents()
@@ -42,7 +43,6 @@ void SDLPal::MainPage::LoadControlContents()
 	if (gConfig.pszMsgFile) tbMsgFile->Text = ConvertString(gConfig.pszMsgFile);
 	if (gConfig.pszMsgFile) tbMsgFile->Text = ConvertString(gConfig.pszMsgFile);
 
 
 	tsLanguage->IsOn = (gConfig.uCodePage == CP_GBK);
 	tsLanguage->IsOn = (gConfig.uCodePage == CP_GBK);
-	tsIsDOS->IsOn = (gConfig.fIsWIN95 == FALSE);
 	tsUseEmbedFont->IsOn = (gConfig.fUseEmbeddedFonts == TRUE);
 	tsUseEmbedFont->IsOn = (gConfig.fUseEmbeddedFonts == TRUE);
 	tsKeepAspect->IsOn = (gConfig.fKeepAspectRatio == TRUE);
 	tsKeepAspect->IsOn = (gConfig.fKeepAspectRatio == TRUE);
 	tsStereo->IsOn = (gConfig.iAudioChannels == 2);
 	tsStereo->IsOn = (gConfig.iAudioChannels == 2);
@@ -82,8 +82,6 @@ void SDLPal::MainPage::LoadControlContents()
 		cbOPLSR->SelectedIndex = 1;
 		cbOPLSR->SelectedIndex = 1;
 	else
 	else
 		cbOPLSR->SelectedIndex = 2;
 		cbOPLSR->SelectedIndex = 2;
-
-	tsUseEmbedFont->Visibility = tsIsDOS->IsOn ? Windows::UI::Xaml::Visibility::Visible : Windows::UI::Xaml::Visibility::Collapsed;
 }
 }
 
 
 void SDLPal::MainPage::SaveControlContents()
 void SDLPal::MainPage::SaveControlContents()
@@ -98,7 +96,6 @@ void SDLPal::MainPage::SaveControlContents()
 	if (gConfig.pszMsgFile) { free(gConfig.pszMsgFile); gConfig.pszMsgFile = NULL; }
 	if (gConfig.pszMsgFile) { free(gConfig.pszMsgFile); gConfig.pszMsgFile = NULL; }
 	gConfig.pszMsgFile = (tbMsgFile->Text->Length() > 0) ? strdup(ConvertString(tbMsgFile->Text).c_str()) : nullptr;
 	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.fUseEmbeddedFonts = tsUseEmbedFont->IsOn ? TRUE : FALSE;
 	gConfig.fKeepAspectRatio = tsKeepAspect->IsOn ? TRUE : FALSE;
 	gConfig.fKeepAspectRatio = tsKeepAspect->IsOn ? TRUE : FALSE;
 	gConfig.iAudioChannels = tsStereo->IsOn ? 2 : 1;
 	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);
 	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)
 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;
 	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)
 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)
 	if (tbGamePath->Text->Length() > 0)
 	{
 	{
 		auto mru_list = Windows::Storage::AccessCache::StorageApplicationPermissions::MostRecentlyUsedList;
 		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;
 		gConfig.fLaunchSetting = FALSE;
 		PAL_SaveConfig();
 		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) {
 		concurrency::create_task(dlg->ShowAsync()).then([] (Windows::UI::Popups::IUICommand^ command) {
 			Application::Current->Exit();
 			Application::Current->Exit();
 		});
 		});
 	}
 	}
 	else
 	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();
 	auto picker = ref new Windows::Storage::Pickers::FileOpenPicker();
 	picker->FileTypeFilter->Append("*");
 	picker->FileTypeFilter->Append("*");
-	picker->ViewMode = Windows::Storage::Pickers::PickerViewMode::List;
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 	picker->PickSingleFileAndContinue();
 	picker->PickSingleFileAndContinue();
 #else
 #else
 	concurrency::create_task(picker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file) { SetFile(file); });
 	concurrency::create_task(picker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file) { SetFile(file); });
 #endif
 #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();
 		void SaveControlContents();
 
 
 	private:
 	private:
+		Windows::ApplicationModel::Resources::ResourceLoader^ m_resLdr;
+
 		void btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		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 cbBGM_SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e);
 		void btnReset_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnReset_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnFinish_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 btnBrowseFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
 		void btnClearFile_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