Browse Source

Refactor 5: UWP version is ready

1. UWP version is ready
2. Fix some little bugs
3. Reusable common files
4. Make prompt more clear
5. Allow message file to be an absolute path (In WinRT, this file will be selected rather than user input for permission reasons).
6. WinRT versions do not require any additional capabilities.
louyihua 8 years ago
parent
commit
7c086bed94
83 changed files with 2366 additions and 1176 deletions
  1. 8 7
      SDL2/README.txt
  2. 41 1
      util.c
  3. 5 0
      util.h
  4. 4 3
      video.c
  5. 2 2
      win32/sdlpal.vcxproj
  6. 10 0
      win32/win32.cpp
  7. 6 4
      winrt/SDLPal.Windows/MainPage.xaml
  8. 51 16
      winrt/SDLPal.Windows/MainPage.xaml.cpp
  9. 5 0
      winrt/SDLPal.WindowsPhone/MainPage.xaml.h
  10. 10 3
      winrt/SDLPal.WindowsPhone/Strings/en/Resources.resw
  11. 10 3
      winrt/SDLPal.Windows/Strings/zh-hans/Resources.resw
  12. 10 3
      winrt/SDLPal.Windows/Strings/zh-hant/Resources.resw
  13. 8 0
      winrt/SDLPal.Common/WinRTIO.cpp
  14. 13 10
      winrt/SDLPal.Common/WinRTUtil.cpp
  15. 90 0
      winrt/SDLPal.UWP.sln
  16. 8 0
      winrt/SDLPal.UWP/App.xaml
  17. 124 0
      winrt/SDLPal.UWP/App.xaml.cpp
  18. 33 0
      winrt/SDLPal.UWP/App.xaml.h
  19. BIN
      winrt/SDLPal.UWP/Assets/Badge.scale-100.png
  20. BIN
      winrt/SDLPal.UWP/Assets/Badge.scale-125.png
  21. BIN
      winrt/SDLPal.UWP/Assets/Badge.scale-150.png
  22. BIN
      winrt/SDLPal.UWP/Assets/Badge.scale-200.png
  23. BIN
      winrt/SDLPal.UWP/Assets/Badge.scale-400.png
  24. BIN
      winrt/SDLPal.UWP/Assets/Logo.scale-100.png
  25. BIN
      winrt/SDLPal.UWP/Assets/Logo.scale-125.png
  26. BIN
      winrt/SDLPal.UWP/Assets/Logo.scale-150.png
  27. BIN
      winrt/SDLPal.UWP/Assets/Logo.scale-200.png
  28. BIN
      winrt/SDLPal.UWP/Assets/Logo.scale-400.png
  29. BIN
      winrt/SDLPal.UWP/Assets/SmallLogo.scale-100.png
  30. BIN
      winrt/SDLPal.UWP/Assets/SmallLogo.scale-125.png
  31. BIN
      winrt/SDLPal.UWP/Assets/SmallLogo.scale-150.png
  32. BIN
      winrt/SDLPal.UWP/Assets/SmallLogo.scale-200.png
  33. BIN
      winrt/SDLPal.UWP/Assets/SmallLogo.scale-400.png
  34. BIN
      winrt/SDLPal.UWP/Assets/SplashScreen.scale-100.png
  35. BIN
      winrt/SDLPal.UWP/Assets/SplashScreen.scale-125.png
  36. BIN
      winrt/SDLPal.UWP/Assets/SplashScreen.scale-150.png
  37. BIN
      winrt/SDLPal.UWP/Assets/SplashScreen.scale-200.png
  38. BIN
      winrt/SDLPal.UWP/Assets/SplashScreen.scale-400.png
  39. BIN
      winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-100.png
  40. BIN
      winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-125.png
  41. BIN
      winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-150.png
  42. BIN
      winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-200.png
  43. BIN
      winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-400.png
  44. BIN
      winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-100.png
  45. BIN
      winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-125.png
  46. BIN
      winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-150.png
  47. BIN
      winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-200.png
  48. BIN
      winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-400.png
  49. BIN
      winrt/SDLPal.UWP/Assets/StoreLogo.scale-100.png
  50. BIN
      winrt/SDLPal.UWP/Assets/StoreLogo.scale-125.png
  51. BIN
      winrt/SDLPal.UWP/Assets/StoreLogo.scale-150.png
  52. BIN
      winrt/SDLPal.UWP/Assets/StoreLogo.scale-200.png
  53. BIN
      winrt/SDLPal.UWP/Assets/StoreLogo.scale-400.png
  54. BIN
      winrt/SDLPal.UWP/Assets/WideLogo.scale-100.png
  55. BIN
      winrt/SDLPal.UWP/Assets/WideLogo.scale-125.png
  56. BIN
      winrt/SDLPal.UWP/Assets/WideLogo.scale-150.png
  57. BIN
      winrt/SDLPal.UWP/Assets/WideLogo.scale-200.png
  58. BIN
      winrt/SDLPal.UWP/Assets/WideLogo.scale-400.png
  59. 45 0
      winrt/SDLPal.UWP/Package.appxmanifest
  60. 203 0
      winrt/SDLPal.UWP/SDLPal.Common.vcxproj
  61. 13 0
      winrt/SDLPal.UWP/SDLPal.Common.vcxproj.filters
  62. 419 0
      winrt/SDLPal.UWP/SDLPal.Core.vcxproj
  63. 643 0
      winrt/SDLPal.UWP/SDLPal.Core.vcxproj.filters
  64. 306 0
      winrt/SDLPal.UWP/SDLPal.UWP.vcxproj
  65. 191 0
      winrt/SDLPal.UWP/SDLPal.UWP.vcxproj.filters
  66. 6 0
      winrt/SDLPal.UWP/pch.cpp
  67. 11 0
      winrt/SDLPal.UWP/pch.h
  68. 0 35
      winrt/SDLPal.Windows/MainPage.xaml.h
  69. 0 4
      winrt/SDLPal.Windows/Package.appxmanifest
  70. 6 6
      winrt/SDLPal.Windows/SDLPal.Core.vcxproj
  71. 18 12
      winrt/SDLPal.Windows/SDLPal.vcxproj
  72. 10 10
      winrt/SDLPal.Windows/SDLPal.vcxproj.filters
  73. 0 258
      winrt/SDLPal.Windows/Strings/en/Resources.resw
  74. 11 6
      winrt/SDLPal.WindowsPhone/App.xaml.cpp
  75. 1 1
      winrt/SDLPal.WindowsPhone/App.xaml.h
  76. 0 63
      winrt/SDLPal.WindowsPhone/MainPage.xaml
  77. 0 183
      winrt/SDLPal.WindowsPhone/MainPage.xaml.cpp
  78. 0 4
      winrt/SDLPal.WindowsPhone/Package.appxmanifest
  79. 4 4
      winrt/SDLPal.WindowsPhone/SDLPal.Core.vcxproj
  80. 18 12
      winrt/SDLPal.WindowsPhone/SDLPal.vcxproj
  81. 23 10
      winrt/SDLPal.WindowsPhone/SDLPal.vcxproj.filters
  82. 0 258
      winrt/SDLPal.WindowsPhone/Strings/zh-hans/Resources.resw
  83. 0 258
      winrt/SDLPal.WindowsPhone/Strings/zh-hant/Resources.resw

+ 8 - 7
SDL2/README.txt

@@ -1,12 +1,13 @@
 Download SDL 2.0 source code from http://libsdl.org/ and extract here.
 
-Special notes for Windows RT versions:
-To make the screen shot function work properly, you need to modify the project files within the 
-VisualC-WinRT directory (including SDL-WinPhone81.vcxproj, SDL-WinRT81.vcxproj & SDL-UWP.vcxproj)
-by manually place the library file 'sdlpal.common.lib' before the 'msvcrt[d].lib'. This work can 
-be done by adding the following LINK options:
+Special notes for Windows store app versions (under winrt directory):
+
+To make the screen shot & mp3 functions work properly, you need to modify the SDL's project files within 
+the VisualC-WinRT directory (including SDL-WinPhone81.vcxproj, SDL-WinRT81.vcxproj & SDL-UWP.vcxproj)
+by manually place the library file 'sdlpal.common.lib' before the 'msvcrt[d].lib'. This work can be done
+by adding the following LINK options:
 
 "sdlpal.common.lib" "vccorlib[d].lib" "msvcrt[d].lib" /NODEFAULTLIB:"vccorlib[d].lib" /NODEFAULTLIB:"msvcrt[d].lib"
 
-Note the the optional 'd' postfix is used only in debug builds. This work can also be done through
-the Visual Studio's GUI.
+Note the the optional 'd' postfix is used only in debug builds. Also, library search path for "sdlpal.common.lib"
+should be appended to the linker's command line. This work can also be done through the Visual Studio's GUI.

+ 41 - 1
util.c

@@ -483,7 +483,10 @@ UTIL_OpenFileForMode(
 {
 	FILE         *fp;
 
-	fp = fopen(va("%s%s", gConfig.pszGamePath, lpszFileName), szMode);
+	if (UTIL_IsAbsolutePath(lpszFileName))
+		fp = fopen(lpszFileName, szMode);
+	else
+		fp = fopen(va("%s%s", gConfig.pszGamePath, lpszFileName), szMode);
 
 #ifndef _WIN32
 	if (fp == NULL)
@@ -531,6 +534,43 @@ UTIL_CloseFile(
    }
 }
 
+#if !defined(PAL_HAS_PLATFORM_SPECIFIC_UTILS)
+
+BOOL
+UTIL_GetScreenSize(
+   DWORD *pdwScreenWidth,
+   DWORD *pdwScreenHeight
+)
+{
+   return FALSE;
+}
+
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+)
+{
+	return FALSE;
+}
+
+INT
+UTIL_Platform_Init(
+   int argc,
+   char* argv[]
+)
+{
+   return 0;
+}
+
+VOID
+UTIL_Platform_Quit(
+   VOID
+)
+{
+}
+
+#endif
+
 #ifdef ENABLE_LOG
 
 static FILE *pLogFile = NULL;

+ 5 - 0
util.h

@@ -129,6 +129,11 @@ UTIL_GetScreenSize(
    DWORD *pdwScreenHeight
 );
 
+BOOL
+UTIL_IsAbsolutePath(
+	LPCSTR  lpszFileName
+);
+
 #if PAL_HAS_TOUCH
 
 BOOL

+ 4 - 3
video.c

@@ -176,7 +176,6 @@ VIDEO_Startup(
    //
    // Check whether to keep the aspect ratio
    //
-   gpRenderRect = NULL;
    if (gConfig.fKeepAspectRatio)
    {
 	   float ax = (float)gConfig.dwScreenWidth / 320.0f;
@@ -186,8 +185,8 @@ VIDEO_Startup(
 		   float ratio = (ax > ay) ? ay : ax;
 		   WORD w = (WORD)(ratio * 320.0f);
 		   WORD h = (WORD)(ratio * 200.0f);
-		   if (w % 4 != 0) w += 4 - (w % 4);
-		   if (h % 4 != 0) h += 4 - (h % 4);
+		   if (w % 4 != 0) w &= ~0x3;
+		   if (h % 4 != 0) h &= ~0x3;
 		   gRenderRect.x = (gConfig.dwScreenWidth - w) / 2;
 		   gRenderRect.y = (gConfig.dwScreenHeight - h) / 2;
 		   gRenderRect.w = w;
@@ -198,6 +197,8 @@ VIDEO_Startup(
 # endif
 	   }
    }
+   else
+	   gpRenderRect = NULL;
 #else
 
    //

+ 2 - 2
win32/sdlpal.vcxproj

@@ -62,7 +62,7 @@
     </Midl>
     <ClCompile>
       <AdditionalIncludeDirectories>..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <WarningLevel>Level3</WarningLevel>
@@ -94,7 +94,7 @@
     </Midl>
     <ClCompile>
       <AdditionalIncludeDirectories>..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

+ 10 - 0
win32/win32.cpp

@@ -319,3 +319,13 @@ UTIL_GetScreenSize(
 {
 	return (pdwScreenWidth && pdwScreenHeight && *pdwScreenWidth && *pdwScreenHeight);
 }
+
+extern "C"
+BOOL UTIL_IsAbsolutePath(LPCSTR  lpszFileName)
+{
+	char szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szFname[_MAX_FNAME], szExt[_MAX_EXT];
+	if (_splitpath_s(lpszFileName, szDrive, szDir, szFname, szExt) == 0)
+		return (strlen(szDrive) > 0 && (szDir[0] == '\\' || szDir[0] == '/'));
+	else
+		return FALSE;
+}

+ 6 - 4
winrt/SDLPal.Windows/MainPage.xaml

@@ -11,13 +11,15 @@
         <ScrollViewer HorizontalScrollMode="Disabled">
             <StackPanel VerticalAlignment="Top" Margin="10,0,10,0">
                 <TextBox x:Name="tbGamePath" x:Uid="GamePath" TextWrapping="Wrap" VerticalAlignment="Top" Header="游戏资源文件夹" IsReadOnly="True" PlaceholderText="游戏资源文件夹"/>
-                <Grid VerticalAlignment="Top">
-                    <Button x:Name="btnBrowseGame" x:Uid="ButtonBrowse" Content="浏览文件夹" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnBrowse_Click" />
-                </Grid>
+                <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="自定义语言文件名"/>
+                <TextBox x:Name="tbMsgFile" x:Uid="MessageFile" Header="自定义语言文件名" TextWrapping="Wrap" VerticalAlignment="Top" PlaceholderText="自定义语言文件名" IsReadOnly="True"/>
+                <StackPanel Orientation="Horizontal">
+                    <Button x:Name="btnBrowseMsgFile" x:Uid="ButtonBrowseFile" Content="选择语言文件" Click="btnBrowseFile_Click" />
+                    <Button x:Name="btnClearMsgFile" x:Uid="ButtonClearFile" Content="清除语言文件" Margin="20,0,0,0" Click="btnClearFile_Click" />
+                </StackPanel>
                 <ToggleSwitch x:Name="tsTouchOverlay" x:Uid="TouchOverlay" Header="启用触屏辅助" OffContent="否" OnContent="是" />
                 <ToggleSwitch x:Name="tsKeepAspect" x:Uid="AspectRatio" Header="保持纵横比" OffContent="否" OnContent="是" />
                 <ToggleSwitch x:Name="tsStereo" x:Uid="Stereo" Header="立体声" OffContent="否" OnContent="是" />

+ 51 - 16
winrt/SDLPal.Windows/MainPage.xaml.cpp

@@ -5,8 +5,8 @@
 
 #include "pch.h"
 #include "MainPage.xaml.h"
-#include "../SDLPal.Common/StringHelper.h"
-#include "../SDLPal.Common/AsyncHelper.h"
+#include "StringHelper.h"
+#include "AsyncHelper.h"
 #include "../../global.h"
 
 using namespace SDLPal;
@@ -22,8 +22,6 @@ using namespace Windows::UI::Xaml::Input;
 using namespace Windows::UI::Xaml::Media;
 using namespace Windows::UI::Xaml::Navigation;
 
-// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=234238 上有介绍
-
 MainPage::MainPage()
 {
 	InitializeComponent();
@@ -114,16 +112,6 @@ void SDLPal::MainPage::SaveControlContents()
 	gConfig.wAudioBufferSize = wcstoul(static_cast<Platform::String^>(static_cast<ComboBoxItem^>(cbAudioBuffer->SelectedItem)->Content)->Data(), nullptr, 10);
 }
 
-void SDLPal::MainPage::btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-	auto picker = ref new Windows::Storage::Pickers::FolderPicker();
-	picker->FileTypeFilter->Append("*");
-	concurrency::create_task(picker->PickSingleFolderAsync()).then([this](Windows::Storage::StorageFolder^ folder) {
-		Windows::Storage::AccessCache::StorageApplicationPermissions::MostRecentlyUsedList->Add(folder, folder->Path);
-		tbGamePath->Text = folder->Path;
-	});
-}
-
 void SDLPal::MainPage::tsIsDOS_Toggled(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
 {
 	if (tsIsDOS->IsOn)
@@ -155,13 +143,15 @@ void SDLPal::MainPage::btnReset_Click(Platform::Object^ sender, Windows::UI::Xam
 	LoadControlContents();
 }
 
-
 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)
 	{
 		SaveControlContents();
+		auto mru_list = Windows::Storage::AccessCache::StorageApplicationPermissions::MostRecentlyUsedList;
+		if (tbGamePath->Tag) mru_list->Add(safe_cast<Windows::Storage::StorageFolder^>(tbGamePath->Tag), tbGamePath->Text);
+		if (tbMsgFile->Tag) mru_list->Add(safe_cast<Windows::Storage::StorageFile^>(tbMsgFile->Tag), tbMsgFile->Text);
 		auto handler = ref new Windows::UI::Popups::UICommandInvokedHandler(this, &MainPage::CloseUICommandHandler);
 		auto dlg = ref new Windows::UI::Popups::MessageDialog(loader->GetString("MBExitContent"));
 		dlg->Commands->Append(ref new Windows::UI::Popups::UICommand(loader->GetString("MBYes"), handler, safe_cast<Platform::Object^>(0)));
@@ -178,7 +168,52 @@ void SDLPal::MainPage::CloseUICommandHandler(Windows::UI::Popups::IUICommand^ co
 {
 	gConfig.fLaunchSetting = ((int)command->Id == 0);
 	PAL_SaveConfig();
-	for (int i = 0; i < 5; i++) m_buttons[i] = nullptr;
 	Application::Current->Exit();
 }
 
+void SDLPal::MainPage::btnClearFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+	tbMsgFile->Text = "";
+	tbMsgFile->Tag = nullptr;
+}
+
+#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+void SDLPal::MainPage::SetPath(Windows::Storage::StorageFolder^ folder)
+{
+	tbGamePath->Text = folder->Path;
+	tbGamePath->Tag = folder;
+}
+
+void SDLPal::MainPage::SetFile(Windows::Storage::StorageFile^ file)
+{
+	tbMsgFile->Text = file->Path;
+	tbMsgFile->Tag = file;
+}
+
+void SDLPal::MainPage::btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+	auto picker = ref new Windows::Storage::Pickers::FolderPicker();
+	picker->FileTypeFilter->Append("*");
+	picker->PickFolderAndContinue();
+}
+
+void SDLPal::MainPage::btnBrowseFile_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+	auto picker = ref new Windows::Storage::Pickers::FileOpenPicker();
+	picker->FileTypeFilter->Append("*");
+	picker->PickSingleFileAndContinue();
+}
+
+#else
+
+void SDLPal::MainPage::btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
+{
+	auto picker = ref new Windows::Storage::Pickers::FolderPicker();
+	picker->FileTypeFilter->Append("*");
+	concurrency::create_task(picker->PickSingleFolderAsync()).then([this](Windows::Storage::StorageFolder^ folder) {
+		tbGamePath->Text = folder->Path;
+		tbGamePath->Tag = folder;
+	});
+}
+
+#endif

+ 5 - 0
winrt/SDLPal.WindowsPhone/MainPage.xaml.h

@@ -17,7 +17,10 @@ namespace SDLPal
 	public:
 		MainPage();
 
+#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
 		void SetPath(Windows::Storage::StorageFolder^ folder);
+		void SetFile(Windows::Storage::StorageFile^ file);
+#endif
 
 	protected:
 		void LoadControlContents();
@@ -31,5 +34,7 @@ namespace SDLPal
 		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);
 	};
 }

+ 10 - 3
winrt/SDLPal.WindowsPhone/Strings/en/Resources.resw

@@ -141,6 +141,12 @@
   <data name="ButtonBrowse.Content" xml:space="preserve">
     <value>Browse folder</value>
   </data>
+  <data name="ButtonBrowseFile.Content" xml:space="preserve">
+    <value>Select</value>
+  </data>
+  <data name="ButtonClearFile.Content" xml:space="preserve">
+    <value>Clear</value>
+  </data>
   <data name="ButtonDefault.Content" xml:space="preserve">
     <value>Default setting</value>
   </data>
@@ -190,13 +196,14 @@
     <value>The game resource folder must be specified!</value>
   </data>
   <data name="MBExitContent" xml:space="preserve">
-    <value>Launch the setting interface on next start?</value>
+    <value>Settings saved for next launch.
+Choose the behavior of next launch:</value>
   </data>
   <data name="MBNo" xml:space="preserve">
-    <value>No</value>
+    <value>Start game</value>
   </data>
   <data name="MBYes" xml:space="preserve">
-    <value>Yes</value>
+    <value>Enter setting</value>
   </data>
   <data name="MessageFile.Header" xml:space="preserve">
     <value>Customized message file</value>

+ 10 - 3
winrt/SDLPal.Windows/Strings/zh-hans/Resources.resw

@@ -141,6 +141,12 @@
   <data name="ButtonBrowse.Content" xml:space="preserve">
     <value>浏览文件夹</value>
   </data>
+  <data name="ButtonBrowseFile.Content" xml:space="preserve">
+    <value>选择语言文件</value>
+  </data>
+  <data name="ButtonClearFile.Content" xml:space="preserve">
+    <value>清除语言文件</value>
+  </data>
   <data name="ButtonDefault.Content" xml:space="preserve">
     <value>默认设置</value>
   </data>
@@ -190,13 +196,14 @@
     <value>必须指定游戏资源文件夹!</value>
   </data>
   <data name="MBExitContent" xml:space="preserve">
-    <value>下次启动时要进入配置界面吗?</value>
+    <value>设置已保存,下次启动程序时生效。
+请选择下次启动程序时的行为:</value>
   </data>
   <data name="MBNo" xml:space="preserve">
-    <value></value>
+    <value>启动游戏</value>
   </data>
   <data name="MBYes" xml:space="preserve">
-    <value></value>
+    <value>进入设置</value>
   </data>
   <data name="MessageFile.Header" xml:space="preserve">
     <value>自定义语言文件</value>

+ 10 - 3
winrt/SDLPal.Windows/Strings/zh-hant/Resources.resw

@@ -141,6 +141,12 @@
   <data name="ButtonBrowse.Content" xml:space="preserve">
     <value>瀏覽資料夾</value>
   </data>
+  <data name="ButtonBrowseFile.Content" xml:space="preserve">
+    <value>選擇語言檔</value>
+  </data>
+  <data name="ButtonClearFile.Content" xml:space="preserve">
+    <value>清除語言檔</value>
+  </data>
   <data name="ButtonDefault.Content" xml:space="preserve">
     <value>默認設定</value>
   </data>
@@ -190,13 +196,14 @@
     <value>必須指定遊戲資源檔夾!</value>
   </data>
   <data name="MBExitContent" xml:space="preserve">
-    <value>下次啟動時要進入設定介面嗎?</value>
+    <value>設定已保存,下次啟動程式時生效。
+請選擇下次啟動程式時的行為:</value>
   </data>
   <data name="MBNo" xml:space="preserve">
-    <value></value>
+    <value>啟動遊戲</value>
   </data>
   <data name="MBYes" xml:space="preserve">
-    <value></value>
+    <value>進入設定</value>
   </data>
   <data name="MessageFile.Header" xml:space="preserve">
     <value>自訂語言檔</value>

+ 8 - 0
winrt/SDLPal.Common/WinRTIO.cpp

@@ -76,6 +76,14 @@ errno_t WRT_fopen_s(WRT_FILE ** pFile, const char * _Filename, const char * _Mod
 	size_t offset = 0;
 	while ((offset = path.find(L'/', offset)) != std::wstring::npos)
 		path[offset++] = L'\\';
+	if (path.size() > 0)
+	{
+		if (path.back() == L':') path.append(L"\\");
+	}
+	else
+	{
+		path.assign(Windows::Storage::ApplicationData::Current->LocalFolder->Path->Data());
+	}
 
 	Windows::Storage::StorageFolder^ folder = nullptr;
 	Event eventHandle;

+ 13 - 10
winrt/SDLPal.Common/WinRTUtil.cpp

@@ -55,13 +55,6 @@ LPCSTR UTIL_ScreenShotPath(VOID)
 	return UTIL_BasePath();
 }
 
-static BOOL UTIL_IsMobile(VOID)
-{
-	auto rc = Windows::ApplicationModel::Resources::Core::ResourceContext::GetForCurrentView();
-	auto qv = rc->QualifierValues;
-	return qv->HasKey("DeviceFamily") && qv->Lookup("DeviceFamily") == "Mobile";
-}
-
 extern "C"
 BOOL UTIL_GetScreenSize(DWORD *pdwScreenWidth, DWORD *pdwScreenHeight)
 {
@@ -70,9 +63,9 @@ BOOL UTIL_GetScreenSize(DWORD *pdwScreenWidth, DWORD *pdwScreenHeight)
 	IDXGIAdapter1* pAdapter = nullptr;
 	IDXGIOutput* pOutput = nullptr;
 	DWORD retval = FALSE;
-	
-#if (_WIN32_WINNT >= 0x0A00) && (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP)
-	if (!UTIL_IsMobile()) return FALSE;
+
+#if _WIN32_WINNT >= 0x0A00
+	if (Windows::System::Profile::AnalyticsInfo::VersionInfo->DeviceFamily != L"Windows.Mobile") return FALSE;
 #endif
 
 	if (!pdwScreenWidth || !pdwScreenHeight) return FALSE;
@@ -103,6 +96,16 @@ UTIL_WP_GetScreenSize_exit:
 	return retval;
 }
 
+extern "C"
+BOOL UTIL_IsAbsolutePath(LPCSTR  lpszFileName)
+{
+	char szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szFname[_MAX_FNAME], szExt[_MAX_EXT];
+	if (_splitpath_s(lpszFileName, szDrive, szDir, szFname, szExt) == 0)
+		return (strlen(szDrive) > 0 && (szDir[0] == '\\' || szDir[0] == '/'));
+	else
+		return FALSE;
+}
+
 extern "C"
 BOOL UTIL_TouchEnabled(VOID)
 {

+ 90 - 0
winrt/SDLPal.UWP.sln

@@ -0,0 +1,90 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25123.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDLPal.Core", "SDLPal.UWP\SDLPal.Core.vcxproj", "{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDLPal.Common", "SDLPal.UWP\SDLPal.Common.vcxproj", "{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDLPal", "SDLPal.UWP\SDLPal.UWP.vcxproj", "{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}"
+	ProjectSection(ProjectDependencies) = postProject
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE} = {89E9B32E-A86A-47C3-A948-D2B1622925CE}
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8} = {96D34C5D-CE4D-43F7-822C-C34775AAFEA8}
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6} = {0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2-UWP", "..\SDL2\VisualC-WinRT\UWP_VS2015\SDL-UWP.vcxproj", "{89E9B32E-A86A-47C3-A948-D2B1622925CE}"
+	ProjectSection(ProjectDependencies) = postProject
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6} = {0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|ARM = Debug|ARM
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|ARM = Release|ARM
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|ARM.ActiveCfg = Debug|ARM
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|ARM.Build.0 = Debug|ARM
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|x64.ActiveCfg = Debug|x64
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|x64.Build.0 = Debug|x64
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|x86.ActiveCfg = Debug|Win32
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Debug|x86.Build.0 = Debug|Win32
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|ARM.ActiveCfg = Release|ARM
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|ARM.Build.0 = Release|ARM
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|x64.ActiveCfg = Release|x64
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|x64.Build.0 = Release|x64
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|x86.ActiveCfg = Release|Win32
+		{96D34C5D-CE4D-43F7-822C-C34775AAFEA8}.Release|x86.Build.0 = Release|Win32
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|ARM.ActiveCfg = Debug|ARM
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|ARM.Build.0 = Debug|ARM
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|x64.ActiveCfg = Debug|x64
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|x64.Build.0 = Debug|x64
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|x86.ActiveCfg = Debug|Win32
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Debug|x86.Build.0 = Debug|Win32
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|ARM.ActiveCfg = Release|ARM
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|ARM.Build.0 = Release|ARM
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|x64.ActiveCfg = Release|x64
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|x64.Build.0 = Release|x64
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|x86.ActiveCfg = Release|Win32
+		{0425A2D9-BB80-4C35-8C69-1DA6E3494FA6}.Release|x86.Build.0 = Release|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|ARM.ActiveCfg = Debug|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|ARM.Build.0 = Debug|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|ARM.Deploy.0 = Debug|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x64.ActiveCfg = Debug|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x64.Build.0 = Debug|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x64.Deploy.0 = Debug|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x86.ActiveCfg = Debug|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x86.Build.0 = Debug|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Debug|x86.Deploy.0 = Debug|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|ARM.ActiveCfg = Release|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|ARM.Build.0 = Release|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|ARM.Deploy.0 = Release|ARM
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x64.ActiveCfg = Release|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x64.Build.0 = Release|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x64.Deploy.0 = Release|x64
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x86.ActiveCfg = Release|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x86.Build.0 = Release|Win32
+		{B1809B68-0D9A-4E0E-ADDB-272CA1C9FA38}.Release|x86.Deploy.0 = Release|Win32
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.ActiveCfg = Debug|ARM
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.Build.0 = Debug|ARM
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.ActiveCfg = Debug|x64
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.Build.0 = Debug|x64
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.ActiveCfg = Debug|Win32
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.Build.0 = Debug|Win32
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.ActiveCfg = Release|ARM
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.Build.0 = Release|ARM
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.ActiveCfg = Release|x64
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.Build.0 = Release|x64
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.ActiveCfg = Release|Win32
+		{89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 8 - 0
winrt/SDLPal.UWP/App.xaml

@@ -0,0 +1,8 @@
+<Application
+    x:Class="SDLPal.App"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:local="using:SDLPal"
+    RequestedTheme="Light">
+
+</Application>

+ 124 - 0
winrt/SDLPal.UWP/App.xaml.cpp

@@ -0,0 +1,124 @@
+//
+// App.xaml.cpp
+// App 类的实现。
+//
+
+#include "pch.h"
+#include "MainPage.xaml.h"
+
+using namespace SDLPal;
+
+using namespace Platform;
+using namespace Windows::ApplicationModel;
+using namespace Windows::ApplicationModel::Activation;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+using namespace Windows::UI::Xaml;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::UI::Xaml::Controls::Primitives;
+using namespace Windows::UI::Xaml::Data;
+using namespace Windows::UI::Xaml::Input;
+using namespace Windows::UI::Xaml::Interop;
+using namespace Windows::UI::Xaml::Media;
+using namespace Windows::UI::Xaml::Navigation;
+
+/// <summary>
+/// 初始化单一实例应用程序对象。这是执行的创作代码的第一行,
+/// 已执行,逻辑上等同于 main() 或 WinMain()。
+/// </summary>
+App::App()
+{
+    InitializeComponent();
+    Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending);
+}
+
+/// <summary>
+/// 在应用程序由最终用户正常启动时进行调用。
+/// 将在启动应用程序以打开特定文件等情况下使用。
+/// </summary>
+/// <param name="e">有关启动请求和过程的详细信息。</param>
+void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e)
+{
+#if _DEBUG
+    // 调试时显示图形分析信息。
+    if (IsDebuggerPresent())
+    {
+        // 显示当前帧速率计数器
+         DebugSettings->EnableFrameRateCounter = true;
+    }
+#endif
+    auto rootFrame = dynamic_cast<Frame^>(Window::Current->Content);
+
+    // 不要在窗口已包含内容时重复应用程序初始化,
+    // 只需确保窗口处于活动状态
+    if (rootFrame == nullptr)
+    {
+        // 创建一个 Frame 以用作导航上下文并将其与
+        // SuspensionManager 键关联
+        rootFrame = ref new Frame();
+
+        rootFrame->NavigationFailed += ref new Windows::UI::Xaml::Navigation::NavigationFailedEventHandler(this, &App::OnNavigationFailed);
+
+        if (e->PreviousExecutionState == ApplicationExecutionState::Terminated)
+        {
+            // TODO: 仅当适用时还原保存的会话状态,并安排
+            // 还原完成后的最终启动步骤
+
+        }
+
+        if (e->PrelaunchActivated == false)
+        {
+            if (rootFrame->Content == nullptr)
+            {
+                // 当导航堆栈尚未还原时,导航到第一页,
+                // 并通过将所需信息作为导航参数传入来配置
+                // 参数
+                rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
+            }
+            // 将框架放在当前窗口中
+            Window::Current->Content = rootFrame;
+            // 确保当前窗口处于活动状态
+            Window::Current->Activate();
+        }
+    }
+    else
+    {
+        if (e->PrelaunchActivated == false)
+        {
+            if (rootFrame->Content == nullptr)
+            {
+                // 当导航堆栈尚未还原时,导航到第一页,
+                // 并通过将所需信息作为导航参数传入来配置
+                // 参数
+                rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
+            }
+            // 确保当前窗口处于活动状态
+            Window::Current->Activate();
+        }
+    }
+}
+
+/// <summary>
+/// 在将要挂起应用程序执行时调用。  在不知道应用程序
+/// 无需知道应用程序会被终止还是会恢复,
+/// 并让内存内容保持不变。
+/// </summary>
+/// <param name="sender">挂起的请求的源。</param>
+/// <param name="e">有关挂起请求的详细信息。</param>
+void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e)
+{
+    (void) sender;  // 未使用的参数
+    (void) e;   // 未使用的参数
+
+    //TODO: 保存应用程序状态并停止任何后台活动
+}
+
+/// <summary>
+/// 导航到特定页失败时调用
+/// </summary>
+///<param name="sender">导航失败的框架</param>
+///<param name="e">有关导航失败的详细信息</param>
+void App::OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e)
+{
+    throw ref new FailureException("Failed to load Page " + e->SourcePageType.Name);
+}

+ 33 - 0
winrt/SDLPal.UWP/App.xaml.h

@@ -0,0 +1,33 @@
+//
+// App.xaml.h
+// App 类的声明。
+//
+
+#pragma once
+
+#include "App.g.h"
+
+namespace SDLPal
+{
+	/// <summary>
+	/// 提供特定于应用程序的行为,以补充默认的应用程序类。
+	/// </summary>
+	ref class App sealed
+	{
+	protected:
+		virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override;
+
+	internal:
+		App();
+
+		void SetMainPage(Windows::UI::Xaml::Controls::Page^ page) { _main_page = page; }
+
+	private:
+		Windows::UI::Xaml::Controls::Page^ _main_page;
+
+		void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e);
+		void OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e);
+	};
+}
+
+extern HANDLE g_eventHandle;

BIN
winrt/SDLPal.UWP/Assets/Badge.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/Badge.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/Badge.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/Badge.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/Badge.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/Logo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/Logo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/Logo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/Logo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/Logo.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/SmallLogo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/SmallLogo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/SmallLogo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/SmallLogo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/SmallLogo.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/SplashScreen.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/SplashScreen.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/SplashScreen.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/SplashScreen.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/SplashScreen.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/Square310x310Logo.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/Square71x71Logo.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/StoreLogo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/StoreLogo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/StoreLogo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/StoreLogo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/StoreLogo.scale-400.png


BIN
winrt/SDLPal.UWP/Assets/WideLogo.scale-100.png


BIN
winrt/SDLPal.UWP/Assets/WideLogo.scale-125.png


BIN
winrt/SDLPal.UWP/Assets/WideLogo.scale-150.png


BIN
winrt/SDLPal.UWP/Assets/WideLogo.scale-200.png


BIN
winrt/SDLPal.UWP/Assets/WideLogo.scale-400.png


+ 45 - 0
winrt/SDLPal.UWP/Package.appxmanifest

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
+  <Identity Name="67d7840d-5e23-4312-8484-b33ffe3d5f36" Publisher="CN=louyihua" Version="2.0.0.0" />
+  <mp:PhoneIdentity PhoneProductId="67d7840d-5e23-4312-8484-b33ffe3d5f36" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
+  <Properties>
+    <DisplayName>SDLPal</DisplayName>
+    <PublisherDisplayName>SDLPal Team</PublisherDisplayName>
+    <Logo>Assets\StoreLogo.png</Logo>
+  </Properties>
+  <Dependencies>
+    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
+  </Dependencies>
+  <Resources>
+    <Resource Language="x-generate" />
+  </Resources>
+  <Applications>
+    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="SDLPal.App">
+      <uap:VisualElements DisplayName="SDLPal" Square150x150Logo="Assets\Logo.png" Square44x44Logo="Assets\SmallLogo.png" Description="SDL-based reimplementation of classic Chinese RPG &quot;Xian Jian Qi Xia Zhuan&quot;." BackgroundColor="transparent">
+        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" Square71x71Logo="Assets\Square71x71Logo.png" Square310x310Logo="Assets\Square310x310Logo.png">
+          <uap:ShowNameOnTiles>
+            <uap:ShowOn Tile="square310x310Logo" />
+          </uap:ShowNameOnTiles>
+        </uap:DefaultTile>
+        <uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="black" />
+      </uap:VisualElements>
+      <Extensions>
+        <uap:Extension Category="windows.fileTypeAssociation">
+          <uap:FileTypeAssociation Name="pal">
+            <uap:SupportedFileTypes>
+              <uap:FileType>.mkf</uap:FileType>
+              <uap:FileType>.dat</uap:FileType>
+              <uap:FileType>.msg</uap:FileType>
+              <uap:FileType>.cfg</uap:FileType>
+              <uap:FileType>.asc</uap:FileType>
+              <uap:FileType>.mp3</uap:FileType>
+              <uap:FileType>.ogg</uap:FileType>
+              <uap:FileType>.rpg</uap:FileType>
+              <uap:FileType>.bmp</uap:FileType>
+            </uap:SupportedFileTypes>
+          </uap:FileTypeAssociation>
+        </uap:Extension>
+      </Extensions>
+    </Application>
+  </Applications>
+</Package>

+ 203 - 0
winrt/SDLPal.UWP/SDLPal.Common.vcxproj

@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h" />
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\SDLPal.Common\SDLPal.Common.def" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\SDLPal.Common\WinRTIO.cpp" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{0425a2d9-bb80-4c35-8c69-1da6e3494fa6}</ProjectGuid>
+    <Keyword>DynamicLibrary</Keyword>
+    <RootNamespace>SDLPal_Common</RootNamespace>
+    <DefaultLanguage>zh-CN</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <GenerateManifest>false</GenerateManifest>
+    <IgnoreImportLibrary>false</IgnoreImportLibrary>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+      <ModuleDefinitionFile>..\SDLPal.Common\SDLPal.Common.def</ModuleDefinitionFile>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 13 - 0
winrt/SDLPal.UWP/SDLPal.Common.vcxproj.filters

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h" />
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\SDLPal.Common\SDLPal.Common.def" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\SDLPal.Common\WinRTIO.cpp" />
+  </ItemGroup>
+</Project>

+ 419 - 0
winrt/SDLPal.UWP/SDLPal.Core.vcxproj

@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{96d34c5d-ce4d-43f7-822c-c34775aafea8}</ProjectGuid>
+    <Keyword>StaticLibrary</Keyword>
+    <RootNamespace>SDLPal_Core</RootNamespace>
+    <DefaultLanguage>zh-CN</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <GenerateManifest>false</GenerateManifest>
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|arm'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|arm'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <CompileAsWinRT>false</CompileAsWinRT>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+      <GenerateWindowsMetadata>false</GenerateWindowsMetadata>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\adplug\adlibemu.h" />
+    <ClInclude Include="..\..\adplug\binfile.h" />
+    <ClInclude Include="..\..\adplug\binio.h" />
+    <ClInclude Include="..\..\adplug\dbemuopl.h" />
+    <ClInclude Include="..\..\adplug\dbopl.h" />
+    <ClInclude Include="..\..\adplug\demuopl.h" />
+    <ClInclude Include="..\..\adplug\dosbox_opl.h" />
+    <ClInclude Include="..\..\adplug\emuopl.h" />
+    <ClInclude Include="..\..\adplug\fmopl.h" />
+    <ClInclude Include="..\..\adplug\fprovide.h" />
+    <ClInclude Include="..\..\adplug\opl.h" />
+    <ClInclude Include="..\..\adplug\player.h" />
+    <ClInclude Include="..\..\adplug\rix.h" />
+    <ClInclude Include="..\..\adplug\surroundopl.h" />
+    <ClInclude Include="..\..\ascii.h" />
+    <ClInclude Include="..\..\battle.h" />
+    <ClInclude Include="..\..\codepage.h" />
+    <ClInclude Include="..\..\common.h" />
+    <ClInclude Include="..\..\ending.h" />
+    <ClInclude Include="..\..\fight.h" />
+    <ClInclude Include="..\..\font.h" />
+    <ClInclude Include="..\..\fontglyph.h" />
+    <ClInclude Include="..\..\game.h" />
+    <ClInclude Include="..\..\getopt.h" />
+    <ClInclude Include="..\..\global.h" />
+    <ClInclude Include="..\..\input.h" />
+    <ClInclude Include="..\..\itemmenu.h" />
+    <ClInclude Include="..\..\libmad\bit.h" />
+    <ClInclude Include="..\..\libmad\decoder.h" />
+    <ClInclude Include="..\..\libmad\fixed.h" />
+    <ClInclude Include="..\..\libmad\frame.h" />
+    <ClInclude Include="..\..\libmad\huffman.h" />
+    <ClInclude Include="..\..\libmad\layer12.h" />
+    <ClInclude Include="..\..\libmad\layer3.h" />
+    <ClInclude Include="..\..\libmad\libmad_config.h" />
+    <ClInclude Include="..\..\libmad\libmad_global.h" />
+    <ClInclude Include="..\..\libmad\mad.h" />
+    <ClInclude Include="..\..\libmad\music_mad.h" />
+    <ClInclude Include="..\..\libmad\stream.h" />
+    <ClInclude Include="..\..\libmad\synth.h" />
+    <ClInclude Include="..\..\libmad\timer.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\config_types.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\ogg.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\os_types.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\codec.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\vorbisenc.h" />
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\vorbisfile.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\backends.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\bitrate.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\books\coupled\res_books_51.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\books\coupled\res_books_stereo.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\books\floor\floor_books.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\books\uncoupled\res_books_uncoupled.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\codebook.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\codec_internal.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\envelope.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\highlevel.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\lookup.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\lookup_data.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\lpc.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\lsp.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\masking.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\mdct.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\misc.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\floor_all.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_11.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_16.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_44.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_8.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_16.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44p51.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44u.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_8.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_11.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_16.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_22.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_32.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44p51.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44u.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_8.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_X.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\os.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\psy.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\registry.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\scales.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\smallft.h" />
+    <ClInclude Include="..\..\liboggvorbis\src\window.h" />
+    <ClInclude Include="..\..\magicmenu.h" />
+    <ClInclude Include="..\..\main.h" />
+    <ClInclude Include="..\..\map.h" />
+    <ClInclude Include="..\..\midi.h" />
+    <ClInclude Include="..\..\palcfg.h" />
+    <ClInclude Include="..\..\palcommon.h" />
+    <ClInclude Include="..\..\palette.h" />
+    <ClInclude Include="..\..\play.h" />
+    <ClInclude Include="..\..\players.h" />
+    <ClInclude Include="..\..\res.h" />
+    <ClInclude Include="..\..\resampler.h" />
+    <ClInclude Include="..\..\rngplay.h" />
+    <ClInclude Include="..\..\scene.h" />
+    <ClInclude Include="..\..\script.h" />
+    <ClInclude Include="..\..\sound.h" />
+    <ClInclude Include="..\..\text.h" />
+    <ClInclude Include="..\..\ui.h" />
+    <ClInclude Include="..\..\uibattle.h" />
+    <ClInclude Include="..\..\uigame.h" />
+    <ClInclude Include="..\..\util.h" />
+    <ClInclude Include="..\..\video.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\adplug\adlibemu.c" />
+    <ClCompile Include="..\..\adplug\binfile.cpp" />
+    <ClCompile Include="..\..\adplug\binio.cpp" />
+    <ClCompile Include="..\..\adplug\dbemuopl.cpp" />
+    <ClCompile Include="..\..\adplug\dbopl.cpp" />
+    <ClCompile Include="..\..\adplug\demuopl.cpp" />
+    <ClCompile Include="..\..\adplug\dosbox_opl.cpp" />
+    <ClCompile Include="..\..\adplug\emuopl.cpp" />
+    <ClCompile Include="..\..\adplug\fmopl.c" />
+    <ClCompile Include="..\..\adplug\fprovide.cpp" />
+    <ClCompile Include="..\..\adplug\player.cpp" />
+    <ClCompile Include="..\..\adplug\rix.cpp" />
+    <ClCompile Include="..\..\adplug\surroundopl.cpp" />
+    <ClCompile Include="..\..\battle.c" />
+    <ClCompile Include="..\..\ending.c" />
+    <ClCompile Include="..\..\fight.c" />
+    <ClCompile Include="..\..\font.c" />
+    <ClCompile Include="..\..\game.c" />
+    <ClCompile Include="..\..\getopt.c" />
+    <ClCompile Include="..\..\global.c" />
+    <ClCompile Include="..\..\input.c" />
+    <ClCompile Include="..\..\itemmenu.c" />
+    <ClCompile Include="..\..\libmad\bit.c" />
+    <ClCompile Include="..\..\libmad\decoder.c" />
+    <ClCompile Include="..\..\libmad\fixed.c" />
+    <ClCompile Include="..\..\libmad\frame.c" />
+    <ClCompile Include="..\..\libmad\huffman.c" />
+    <ClCompile Include="..\..\libmad\layer12.c" />
+    <ClCompile Include="..\..\libmad\layer3.c" />
+    <ClCompile Include="..\..\libmad\music_mad.c" />
+    <ClCompile Include="..\..\libmad\stream.c" />
+    <ClCompile Include="..\..\libmad\synth.c" />
+    <ClCompile Include="..\..\libmad\timer.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\analysis.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\bitrate.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\bitwise.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\block.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\codebook.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\envelope.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\floor0.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\floor1.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\framing.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\info.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\lookup.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\lpc.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\lsp.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\mapping0.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\mdct.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\psy.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\registry.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\res0.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\sharedbook.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\smallft.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\synthesis.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\vorbisenc.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\vorbisfile.c" />
+    <ClCompile Include="..\..\liboggvorbis\src\window.c" />
+    <ClCompile Include="..\..\magicmenu.c" />
+    <ClCompile Include="..\..\main.c" />
+    <ClCompile Include="..\..\map.c" />
+    <ClCompile Include="..\..\mp3play.c" />
+    <ClCompile Include="..\..\oggplay.c" />
+    <ClCompile Include="..\..\overlay.c" />
+    <ClCompile Include="..\..\palcfg.c" />
+    <ClCompile Include="..\..\palcommon.c" />
+    <ClCompile Include="..\..\palette.c" />
+    <ClCompile Include="..\..\play.c" />
+    <ClCompile Include="..\..\res.c" />
+    <ClCompile Include="..\..\resampler.c" />
+    <ClCompile Include="..\..\rixplay.cpp" />
+    <ClCompile Include="..\..\rngplay.c" />
+    <ClCompile Include="..\..\scene.c" />
+    <ClCompile Include="..\..\script.c" />
+    <ClCompile Include="..\..\sound.c" />
+    <ClCompile Include="..\..\text.c" />
+    <ClCompile Include="..\..\ui.c" />
+    <ClCompile Include="..\..\uibattle.c" />
+    <ClCompile Include="..\..\uigame.c" />
+    <ClCompile Include="..\..\util.c" />
+    <ClCompile Include="..\..\video.c" />
+    <ClCompile Include="..\..\yj1.c" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\libmad\D.dat" />
+    <None Include="..\libmad\imdct_s.dat" />
+    <None Include="..\libmad\qc_table.dat" />
+    <None Include="..\libmad\rq_table.dat" />
+    <None Include="..\libmad\sf_table.dat" />
+  </ItemGroup>
+</Project>

+ 643 - 0
winrt/SDLPal.UWP/SDLPal.Core.vcxproj.filters

@@ -0,0 +1,643 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{0cc36439-f62a-4ee3-ac67-fef3acee973c}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>
+    </Filter>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{95d59617-3d0f-4b67-80c1-a23fa64b2d41}</UniqueIdentifier>
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+    </Filter>
+    <Filter Include="adplug">
+      <UniqueIdentifier>{27ea6ab0-52c3-43a4-9a9e-e20b6996ec03}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="libmad">
+      <UniqueIdentifier>{3d46b214-c177-4096-be4f-ff5cd07831b3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis">
+      <UniqueIdentifier>{34f6b1e0-5d44-43a4-8c85-5cfd9ff9bf8f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\include">
+      <UniqueIdentifier>{5e19faaf-a5d7-4014-aa6c-b14296a45a88}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src">
+      <UniqueIdentifier>{6db62a3d-3b1c-40cd-bda9-d2713379a5cf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\include\ogg">
+      <UniqueIdentifier>{dcebed9e-440d-40ef-b255-ca1cb30ce9e3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\include\vorbis">
+      <UniqueIdentifier>{fda068f3-3ee4-4c4a-ab80-bc84267c94e7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src\books">
+      <UniqueIdentifier>{97378ad9-c9a6-4e6f-9134-93430f055e6c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src\modes">
+      <UniqueIdentifier>{54f011fe-6640-4bf3-9757-a8b5771b272a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src\books\coupled">
+      <UniqueIdentifier>{52457dd7-3981-41e0-a2c7-9910705fb32a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src\books\floor">
+      <UniqueIdentifier>{d106ecf2-27c8-410f-a3fd-6a36a75206e9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="liboggvorbis\src\books\uncoupled">
+      <UniqueIdentifier>{7a01992b-546d-4d62-a521-c01bd1500f9c}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\adplug\binfile.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\binio.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\demuopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\dosbox_opl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\emuopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\fmopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\fprovide.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\opl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\player.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\rix.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\surroundopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\adlibemu.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\dbemuopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\adplug\dbopl.h">
+      <Filter>adplug</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\config_types.h">
+      <Filter>liboggvorbis\include\ogg</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\ogg.h">
+      <Filter>liboggvorbis\include\ogg</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\ogg\os_types.h">
+      <Filter>liboggvorbis\include\ogg</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\codec.h">
+      <Filter>liboggvorbis\include\vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\vorbisenc.h">
+      <Filter>liboggvorbis\include\vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\include\vorbis\vorbisfile.h">
+      <Filter>liboggvorbis\include\vorbis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\books\coupled\res_books_51.h">
+      <Filter>liboggvorbis\src\books\coupled</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\books\coupled\res_books_stereo.h">
+      <Filter>liboggvorbis\src\books\coupled</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\books\floor\floor_books.h">
+      <Filter>liboggvorbis\src\books\floor</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\books\uncoupled\res_books_uncoupled.h">
+      <Filter>liboggvorbis\src\books\uncoupled</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\floor_all.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_8.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_11.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_16.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\psych_44.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_8.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_16.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44p51.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\residue_44u.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_8.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_11.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_16.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_22.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_32.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44p51.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_44u.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\modes\setup_X.h">
+      <Filter>liboggvorbis\src\modes</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\backends.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\bitrate.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\codebook.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\codec_internal.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\envelope.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\highlevel.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\lookup.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\lookup_data.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\lpc.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\lsp.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\masking.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\mdct.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\misc.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\os.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\psy.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\registry.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\scales.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\smallft.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\liboggvorbis\src\window.h">
+      <Filter>liboggvorbis\src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\bit.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\decoder.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\fixed.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\frame.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\huffman.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\layer3.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\layer12.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\libmad_config.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\libmad_global.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\mad.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\music_mad.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\stream.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\synth.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\libmad\timer.h">
+      <Filter>libmad</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ascii.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\battle.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\codepage.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ending.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\fight.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\font.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\fontglyph.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\game.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\getopt.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\global.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\input.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\itemmenu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\magicmenu.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\main.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\map.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\palcommon.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\palette.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\play.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\res.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\rngplay.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\scene.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\script.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\sound.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\text.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ui.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\uibattle.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\uigame.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\util.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\video.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\midi.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\players.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\resampler.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\palcfg.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\adplug\binfile.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\binio.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\dosbox_opl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\emuopl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\fmopl.c">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\fprovide.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\player.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\rix.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\surroundopl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\adlibemu.c">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\dbemuopl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\dbopl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\adplug\demuopl.cpp">
+      <Filter>adplug</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\analysis.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\bitrate.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\bitwise.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\block.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\codebook.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\envelope.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\floor0.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\floor1.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\framing.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\info.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\lookup.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\lpc.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\lsp.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\mapping0.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\mdct.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\psy.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\registry.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\res0.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\sharedbook.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\smallft.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\synthesis.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\vorbisenc.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\vorbisfile.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\liboggvorbis\src\window.c">
+      <Filter>liboggvorbis\src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\bit.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\decoder.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\fixed.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\frame.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\huffman.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\layer3.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\layer12.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\music_mad.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\stream.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\synth.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\libmad\timer.c">
+      <Filter>libmad</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\battle.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ending.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\fight.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\font.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\game.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\getopt.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\global.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\input.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\itemmenu.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\magicmenu.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\main.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\map.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\palcommon.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\palette.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\play.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\res.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\rixplay.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\rngplay.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\scene.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\script.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\sound.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\text.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ui.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\uibattle.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\uigame.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\util.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\video.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\yj1.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\mp3play.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\oggplay.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\resampler.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\overlay.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\palcfg.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\libmad\D.dat">
+      <Filter>libmad</Filter>
+    </None>
+    <None Include="..\libmad\imdct_s.dat">
+      <Filter>libmad</Filter>
+    </None>
+    <None Include="..\libmad\qc_table.dat">
+      <Filter>libmad</Filter>
+    </None>
+    <None Include="..\libmad\rq_table.dat">
+      <Filter>libmad</Filter>
+    </None>
+    <None Include="..\libmad\sf_table.dat">
+      <Filter>libmad</Filter>
+    </None>
+  </ItemGroup>
+</Project>

+ 306 - 0
winrt/SDLPal.UWP/SDLPal.UWP.vcxproj

@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{b1809b68-0d9a-4e0e-addb-272ca1c9fa38}</ProjectGuid>
+    <RootNamespace>SDLPal</RootNamespace>
+    <DefaultLanguage>zh-CN</DefaultLanguage>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <AppContainerApplication>true</AppContainerApplication>
+    <ApplicationType>Windows Store</ApplicationType>
+    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformMinVersion>10.0.10240.0</WindowsTargetPlatformMinVersion>
+    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+    <ProjectName>SDLPal</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|ARM">
+      <Configuration>Debug</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|ARM">
+      <Configuration>Release</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <PlatformToolset>v140</PlatformToolset>
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <PackageCertificateKeyFile>SDLPal.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IncludePath>..\..\SDL2\include;$(IncludePath)</IncludePath>
+    <IntDir>$(Platform)\$(Configuration)\$(MSBuildProjectName)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlibd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlibd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlibd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common;$(OutDir)../SDLPal.Core</AdditionalLibraryDirectories>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h" />
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h" />
+    <ClInclude Include="pch.h" />
+    <ClInclude Include="App.xaml.h">
+      <DependentUpon>App.xaml</DependentUpon>
+    </ClInclude>
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="..\SDLPal.Common\MainPage.xaml">
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <AppxManifest Include="Package.appxmanifest">
+      <SubType>Designer</SubType>
+    </AppxManifest>
+    <None Include="SDLPal.UWP_TemporaryKey.pfx" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\SDLPal.Common\SDLPal.cpp" />
+    <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp" />
+    <ClCompile Include="App.xaml.cpp">
+      <DependentUpon>App.xaml</DependentUpon>
+    </ClCompile>
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
+    </ClCompile>
+    <ClCompile Include="pch.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\SDL2\VisualC-WinRT\UWP_VS2015\SDL-UWP.vcxproj">
+      <Project>{89e9b32e-a86a-47c3-a948-d2b1622925ce}</Project>
+    </ProjectReference>
+    <ProjectReference Include="SDLPal.Common.vcxproj">
+      <Project>{0425a2d9-bb80-4c35-8c69-1da6e3494fa6}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="Assets\Badge.scale-100.png" />
+    <Image Include="Assets\Badge.scale-125.png" />
+    <Image Include="Assets\Badge.scale-150.png" />
+    <Image Include="Assets\Badge.scale-200.png" />
+    <Image Include="Assets\Badge.scale-400.png" />
+    <Image Include="Assets\Logo.scale-100.png" />
+    <Image Include="Assets\Logo.scale-125.png" />
+    <Image Include="Assets\Logo.scale-150.png" />
+    <Image Include="Assets\Logo.scale-200.png" />
+    <Image Include="Assets\Logo.scale-400.png" />
+    <Image Include="Assets\SmallLogo.scale-100.png" />
+    <Image Include="Assets\SmallLogo.scale-125.png" />
+    <Image Include="Assets\SmallLogo.scale-150.png" />
+    <Image Include="Assets\SmallLogo.scale-200.png" />
+    <Image Include="Assets\SmallLogo.scale-400.png" />
+    <Image Include="Assets\SplashScreen.scale-100.png" />
+    <Image Include="Assets\SplashScreen.scale-125.png" />
+    <Image Include="Assets\SplashScreen.scale-150.png" />
+    <Image Include="Assets\SplashScreen.scale-200.png" />
+    <Image Include="Assets\SplashScreen.scale-400.png" />
+    <Image Include="Assets\Square310x310Logo.scale-100.png" />
+    <Image Include="Assets\Square310x310Logo.scale-125.png" />
+    <Image Include="Assets\Square310x310Logo.scale-150.png" />
+    <Image Include="Assets\Square310x310Logo.scale-200.png" />
+    <Image Include="Assets\Square310x310Logo.scale-400.png" />
+    <Image Include="Assets\Square71x71Logo.scale-100.png" />
+    <Image Include="Assets\Square71x71Logo.scale-125.png" />
+    <Image Include="Assets\Square71x71Logo.scale-150.png" />
+    <Image Include="Assets\Square71x71Logo.scale-200.png" />
+    <Image Include="Assets\Square71x71Logo.scale-400.png" />
+    <Image Include="Assets\StoreLogo.scale-100.png" />
+    <Image Include="Assets\StoreLogo.scale-125.png" />
+    <Image Include="Assets\StoreLogo.scale-150.png" />
+    <Image Include="Assets\StoreLogo.scale-200.png" />
+    <Image Include="Assets\StoreLogo.scale-400.png" />
+    <Image Include="Assets\WideLogo.scale-100.png" />
+    <Image Include="Assets\WideLogo.scale-125.png" />
+    <Image Include="Assets\WideLogo.scale-150.png" />
+    <Image Include="Assets\WideLogo.scale-200.png" />
+    <Image Include="Assets\WideLogo.scale-400.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 191 - 0
winrt/SDLPal.UWP/SDLPal.UWP.vcxproj.filters

@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Common">
+      <UniqueIdentifier>b1809b68-0d9a-4e0e-addb-272ca1c9fa38</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Assets">
+      <UniqueIdentifier>f6a7f455-eb49-4cf2-8163-0a08be9eab6f</UniqueIdentifier>
+      <Extensions>bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png</Extensions>
+    </Filter>
+    <Filter Include="Strings">
+      <UniqueIdentifier>{8e97b7b3-05df-4010-a461-4d9866a9339b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\en">
+      <UniqueIdentifier>{fdcb61a1-81b9-41e4-aea8-004e0a22ad8a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\zh-hans">
+      <UniqueIdentifier>{af6ba614-f603-4915-a76a-aafd090457ca}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Strings\zh-hant">
+      <UniqueIdentifier>{526f9551-1219-4928-a6a8-79e479e16881}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="App.xaml.cpp" />
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp" />
+    <ClCompile Include="pch.cpp" />
+    <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\SDLPal.Common\SDLPal.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="pch.h" />
+    <ClInclude Include="App.xaml.h" />
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h" />
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <AppxManifest Include="Package.appxmanifest" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="SDLPal.UWP_TemporaryKey.pfx" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="..\SDLPal.Common\MainPage.xaml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="Assets\Badge.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Badge.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Badge.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Badge.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Badge.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Logo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Logo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Logo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Logo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Logo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SmallLogo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SmallLogo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SmallLogo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SmallLogo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SmallLogo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SplashScreen.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SplashScreen.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SplashScreen.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SplashScreen.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\SplashScreen.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square71x71Logo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\StoreLogo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\WideLogo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\WideLogo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\WideLogo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\WideLogo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\WideLogo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square71x71Logo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square71x71Logo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square71x71Logo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square71x71Logo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square310x310Logo.scale-100.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square310x310Logo.scale-125.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square310x310Logo.scale-150.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square310x310Logo.scale-200.png">
+      <Filter>Assets</Filter>
+    </Image>
+    <Image Include="Assets\Square310x310Logo.scale-400.png">
+      <Filter>Assets</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw">
+      <Filter>Strings\en</Filter>
+    </PRIResource>
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw">
+      <Filter>Strings\zh-hant</Filter>
+    </PRIResource>
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw">
+      <Filter>Strings\zh-hans</Filter>
+    </PRIResource>
+  </ItemGroup>
+</Project>

+ 6 - 0
winrt/SDLPal.UWP/pch.cpp

@@ -0,0 +1,6 @@
+//
+// pch.cpp
+// Include the standard header and generate the precompiled header.
+//
+
+#include "pch.h"

+ 11 - 0
winrt/SDLPal.UWP/pch.h

@@ -0,0 +1,11 @@
+//
+// pch.h
+// Header for standard system include files.
+//
+
+#pragma once
+
+#include <collection.h>
+#include <ppltasks.h>
+
+#include "App.xaml.h"

+ 0 - 35
winrt/SDLPal.Windows/MainPage.xaml.h

@@ -1,35 +0,0 @@
-//
-// MainPage.xaml.h
-// MainPage 类的声明。
-//
-
-#pragma once
-
-#include "MainPage.g.h"
-
-namespace SDLPal
-{
-	/// <summary>
-	/// 可用于自身或导航至 Frame 内部的空白页。
-	/// </summary>
-	public ref class MainPage sealed
-	{
-	public:
-		MainPage();
-
-	protected:
-		void LoadControlContents();
-		void SaveControlContents();
-
-	private:
-		Windows::UI::Xaml::Controls::Button^ m_buttons[5];
-
-		void CloseUICommandHandler(Windows::UI::Popups::IUICommand^ command);
-
-		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);
-	};
-}

+ 0 - 4
winrt/SDLPal.Windows/Package.appxmanifest

@@ -39,8 +39,4 @@
       </Extensions>
     </Application>
   </Applications>
-  <Capabilities>
-    <Capability Name="removableStorage" />
-    <Capability Name="picturesLibrary" />
-  </Capabilities>
 </Package>

+ 6 - 6
winrt/SDLPal.Windows/SDLPal.Core.vcxproj

@@ -135,7 +135,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
@@ -146,7 +146,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -157,7 +157,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -168,7 +168,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -179,7 +179,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -190,7 +190,7 @@
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;__WINRT__=1;PAL_HAS_TOUCH=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;_CRT_SECURE_NO_WARNINGS;__WINRT__=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 18 - 12
winrt/SDLPal.Windows/SDLPal.vcxproj

@@ -132,10 +132,11 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
-      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>vccorlibd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
     </Link>
   </ItemDefinitionGroup>
@@ -144,10 +145,11 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
-      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
     </Link>
   </ItemDefinitionGroup>
@@ -156,6 +158,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -168,6 +171,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
@@ -180,10 +184,11 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
-      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>vccorlibd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
     </Link>
   </ItemDefinitionGroup>
@@ -192,10 +197,11 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalLibraryDirectories>$(OutDir)../SDLPal.Common.Windows;$(OutDir)../SDLPal.Core.Windows</AdditionalLibraryDirectories>
-      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.common.lib;sdlpal.core.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>vccorlib.lib;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
     </Link>
   </ItemDefinitionGroup>
@@ -204,15 +210,15 @@
     <ClInclude Include="App.xaml.h">
       <DependentUpon>App.xaml</DependentUpon>
     </ClInclude>
-    <ClInclude Include="MainPage.xaml.h">
-      <DependentUpon>MainPage.xaml</DependentUpon>
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ApplicationDefinition Include="App.xaml">
       <SubType>Designer</SubType>
     </ApplicationDefinition>
-    <Page Include="MainPage.xaml">
+    <Page Include="..\SDLPal.Common\MainPage.xaml">
       <SubType>Designer</SubType>
     </Page>
   </ItemGroup>
@@ -306,8 +312,8 @@
     <ClCompile Include="App.xaml.cpp">
       <DependentUpon>App.xaml</DependentUpon>
     </ClCompile>
-    <ClCompile Include="MainPage.xaml.cpp">
-      <DependentUpon>MainPage.xaml</DependentUpon>
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
     </ClCompile>
     <ClCompile Include="pch.cpp">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
@@ -321,9 +327,9 @@
     <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <PRIResource Include="Strings\en\Resources.resw" />
-    <PRIResource Include="Strings\zh-hans\Resources.resw" />
-    <PRIResource Include="Strings\zh-hant\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\SDL2\VisualC-WinRT\WinRT81_VS2013\SDL-WinRT81.vcxproj">

+ 10 - 10
winrt/SDLPal.Windows/SDLPal.vcxproj.filters

@@ -23,15 +23,15 @@
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="App.xaml.cpp" />
-    <ClCompile Include="MainPage.xaml.cpp" />
     <ClCompile Include="pch.cpp" />
     <ClCompile Include="..\SDLPal.Common\SDLPal.cpp" />
     <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp" />
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="pch.h" />
     <ClInclude Include="App.xaml.h" />
-    <ClInclude Include="MainPage.xaml.h" />
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h" />
   </ItemGroup>
   <ItemGroup>
     <Image Include="Assets\Logo.scale-100.png">
@@ -120,17 +120,17 @@
     <None Include="SDLPal_TemporaryKey.pfx" />
   </ItemGroup>
   <ItemGroup>
-    <Page Include="MainPage.xaml" />
-  </ItemGroup>
-  <ItemGroup>
-    <PRIResource Include="Strings\en\Resources.resw">
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw">
       <Filter>Strings\en</Filter>
     </PRIResource>
-    <PRIResource Include="Strings\zh-hant\Resources.resw">
-      <Filter>Strings\zh-hant</Filter>
-    </PRIResource>
-    <PRIResource Include="Strings\zh-hans\Resources.resw">
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw">
       <Filter>Strings\zh-hans</Filter>
     </PRIResource>
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw">
+      <Filter>Strings\zh-hant</Filter>
+    </PRIResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="..\SDLPal.Common\MainPage.xaml" />
   </ItemGroup>
 </Project>

+ 0 - 258
winrt/SDLPal.Windows/Strings/en/Resources.resw

@@ -1,258 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="AspectRatio.Header" xml:space="preserve">
-    <value>Keep aspect ratio</value>
-  </data>
-  <data name="AspectRatio.OffContent" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="AspectRatio.OnContent" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="AudioBuffer.Header" xml:space="preserve">
-    <value>Audio buffer size</value>
-  </data>
-  <data name="AudioBuffer.PlaceholderText" xml:space="preserve">
-    <value>Audio buffer size</value>
-  </data>
-  <data name="BGM.Header" xml:space="preserve">
-    <value>Format of BGM</value>
-  </data>
-  <data name="BGM.PlaceholderText" xml:space="preserve">
-    <value>Format of BGM</value>
-  </data>
-  <data name="ButtonBrowse.Content" xml:space="preserve">
-    <value>Browse folder</value>
-  </data>
-  <data name="ButtonDefault.Content" xml:space="preserve">
-    <value>Default setting</value>
-  </data>
-  <data name="ButtonFinish.Content" xml:space="preserve">
-    <value>Finish setting</value>
-  </data>
-  <data name="CD.Header" xml:space="preserve">
-    <value>Format of CD track</value>
-  </data>
-  <data name="CD.PlaceholderText" xml:space="preserve">
-    <value>Format of CD track</value>
-  </data>
-  <data name="DOS.Header" xml:space="preserve">
-    <value>Game resource version</value>
-  </data>
-  <data name="DOS.OffContent" xml:space="preserve">
-    <value>WIN95</value>
-  </data>
-  <data name="DOS.OnContent" xml:space="preserve">
-    <value>DOS</value>
-  </data>
-  <data name="EmbeddedFont.Header" xml:space="preserve">
-    <value>Use the font within game resource</value>
-  </data>
-  <data name="EmbeddedFont.OffContent" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="EmbeddedFont.OnContent" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="GamePath.Header" xml:space="preserve">
-    <value>Folder of game resource</value>
-  </data>
-  <data name="GamePath.PlaceholderText" xml:space="preserve">
-    <value>Folder of game resource</value>
-  </data>
-  <data name="Language.Header" xml:space="preserve">
-    <value>Game resource language</value>
-  </data>
-  <data name="Language.OffContent" xml:space="preserve">
-    <value>Traditional Chinese</value>
-  </data>
-  <data name="Language.OnContent" xml:space="preserve">
-    <value>Simplified Chinese</value>
-  </data>
-  <data name="MBEmptyContent" xml:space="preserve">
-    <value>The game resource folder must be specified!</value>
-  </data>
-  <data name="MBExitContent" xml:space="preserve">
-    <value>Launch the setting interface on next start?</value>
-  </data>
-  <data name="MBNo" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="MBYes" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="MessageFile.Header" xml:space="preserve">
-    <value>Customized message file</value>
-  </data>
-  <data name="MessageFile.PlaceholderText" xml:space="preserve">
-    <value>Customized message file</value>
-  </data>
-  <data name="OPL.Header" xml:space="preserve">
-    <value>Type of OPL simulator</value>
-  </data>
-  <data name="OPL.PlaceholderText" xml:space="preserve">
-    <value>Type of OPL simulator</value>
-  </data>
-  <data name="OPLSR.Header" xml:space="preserve">
-    <value>Sample rate of OPL simulator</value>
-  </data>
-  <data name="OPLSR.PlaceholderText" xml:space="preserve">
-    <value>Sample rate of OPL simulator</value>
-  </data>
-  <data name="Quality.Header" xml:space="preserve">
-    <value>Audio quality</value>
-  </data>
-  <data name="Samplerate.Header" xml:space="preserve">
-    <value>Sample rate of audio output</value>
-  </data>
-  <data name="Samplerate.PlaceholderText" xml:space="preserve">
-    <value>Sample rate of audio output</value>
-  </data>
-  <data name="Stereo.Header" xml:space="preserve">
-    <value>Stereo</value>
-  </data>
-  <data name="Stereo.OffContent" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="Stereo.OnContent" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="SurroundOPL.Header" xml:space="preserve">
-    <value>Use surround OPL</value>
-  </data>
-  <data name="SurroundOPL.OffContent" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="SurroundOPL.OnContent" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="TouchOverlay.Header" xml:space="preserve">
-    <value>Use touch overlay</value>
-  </data>
-  <data name="TouchOverlay.OffContent" xml:space="preserve">
-    <value>No</value>
-  </data>
-  <data name="TouchOverlay.OnContent" xml:space="preserve">
-    <value>Yes</value>
-  </data>
-  <data name="Volume.Header" xml:space="preserve">
-    <value>Volume</value>
-  </data>
-</root>

+ 11 - 6
winrt/SDLPal.WindowsPhone/App.xaml.cpp

@@ -128,10 +128,20 @@ void App::RootFrame_FirstNavigated(Object^ sender, NavigationEventArgs^ e)
 
 void SDLPal::App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs ^ args)
 {
-	if (args->Kind == ActivationKind::PickFolderContinuation)
+	switch (args->Kind)
+	{
+	case ActivationKind::PickFolderContinuation:
 	{
 		auto folder = safe_cast<IFolderPickerContinuationEventArgs^>(args)->Folder;
 		if (folder) static_cast<MainPage^>(_main_page)->SetPath(folder);
+		break;
+	}
+	case ActivationKind::PickFileContinuation:
+	{
+		auto file = safe_cast<IFileOpenPickerContinuationEventArgs^>(args)->Files->First()->Current;
+		if (file) static_cast<MainPage^>(_main_page)->SetFile(file);
+		break;
+	}
 	}
 	Application::OnActivated(args);
 }
@@ -148,8 +158,3 @@ void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e)
 
 	// TODO: 保存应用程序状态并停止任何后台活动
 }
-
-void App::SetMainPage(Windows::UI::Xaml::Controls::Page^ page)
-{
-	_main_page = page;
-}

+ 1 - 1
winrt/SDLPal.WindowsPhone/App.xaml.h

@@ -19,7 +19,7 @@ namespace SDLPal
 
 		virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override;
 
-		void SetMainPage(Windows::UI::Xaml::Controls::Page^ page);
+		void SetMainPage(Windows::UI::Xaml::Controls::Page^ page) { _main_page = page; }
 
 	protected:
 		virtual void OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args) override;

+ 0 - 63
winrt/SDLPal.WindowsPhone/MainPage.xaml

@@ -1,63 +0,0 @@
-<Page
-    x:Class="SDLPal.MainPage"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    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">
-
-    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
-        <ScrollViewer HorizontalScrollMode="Disabled">
-            <StackPanel VerticalAlignment="Top" Margin="10,0,10,0">
-                <TextBox x:Name="tbGamePath" x:Uid="GamePath" TextWrapping="Wrap" VerticalAlignment="Top" Header="游戏资源文件夹" IsReadOnly="True" PlaceholderText="游戏资源文件夹"/>
-                <Grid VerticalAlignment="Top">
-                    <Button x:Name="btnBrowseGame" x:Uid="ButtonBrowse" Content="浏览文件夹" HorizontalAlignment="Right" VerticalAlignment="Top" Click="btnBrowse_Click" />
-                </Grid>
-                <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="自定义语言文件名"/>
-                <ToggleSwitch x:Name="tsTouchOverlay" x:Uid="TouchOverlay" Header="启用触屏辅助" OffContent="否" OnContent="是" />
-                <ToggleSwitch x:Name="tsKeepAspect" x:Uid="AspectRatio" Header="保持纵横比" OffContent="否" OnContent="是" />
-                <ToggleSwitch x:Name="tsStereo" x:Uid="Stereo" Header="立体声" OffContent="否" OnContent="是" />
-                <Slider x:Name="slVolume" x:Uid="Volume" Header="音量" TickPlacement="Inline" TickFrequency="10" />
-                <Slider x:Name="slQuality" x:Uid="Quality" Header="音频质量" Maximum="4" LargeChange="1" TickFrequency="1" />
-                <ComboBox x:Name="cbSampleRate" x:Uid="Samplerate" Header="音频输出采样率" PlaceholderText="音频输出采样率">
-                    <ComboBoxItem Content="11025"/>
-                    <ComboBoxItem Content="22050"/>
-                    <ComboBoxItem Content="44100"/>
-                </ComboBox>
-                <ComboBox x:Name="cbAudioBuffer" x:Uid="AudioBuffer" Header="音频缓冲区大小" PlaceholderText="音频缓冲区大小">
-                    <ComboBoxItem Content="512"/>
-                    <ComboBoxItem Content="1024"/>
-                    <ComboBoxItem Content="2048"/>
-                    <ComboBoxItem Content="4096"/>
-                </ComboBox>
-                <ComboBox x:Name="cbCD" x:Uid="CD" Header="CD 音轨格式" PlaceholderText="CD 音轨格式">
-                    <ComboBoxItem Content="MP3"/>
-                    <ComboBoxItem Content="OGG"/>
-                </ComboBox>
-                <ComboBox x:Name="cbBGM" x:Uid="BGM" Header="背景音乐格式" PlaceholderText="背景音乐格式" SelectionChanged="cbBGM_SelectionChanged">
-                    <ComboBoxItem Content="RIX"/>
-                    <ComboBoxItem Content="MP3"/>
-                    <ComboBoxItem Content="OGG"/>
-                </ComboBox>
-                <ComboBox x:Name="cbOPL" x:Uid="OPL" Header="OPL 模拟器" PlaceholderText="OPL 模拟器">
-                    <ComboBoxItem Content="DOSBOX"/>
-                    <ComboBoxItem Content="MAME"/>
-                </ComboBox>
-                <ComboBox x:Name="cbOPLSR" x:Uid="OPLSR" Header="OPL 模拟器采样率" PlaceholderText="OPL 模拟器采样率">
-                    <ComboBoxItem Content="12429"/>
-                    <ComboBoxItem Content="24858"/>
-                    <ComboBoxItem Content="49716"/>
-                </ComboBox>
-                <ToggleSwitch x:Name="tsSurroundOPL" x:Uid="SurroundOPL" Header="环绕声 OPL" OffContent="否" OnContent="是" />
-                <Grid VerticalAlignment="Top">
-                    <Button x:Name="btnReset" x:Uid="ButtonDefault" Content="默认设置" HorizontalAlignment="Left" Click="btnReset_Click" />
-                    <Button x:Name="btnFinish" x:Uid="ButtonFinish" Content="完成设置" HorizontalAlignment="Right" Click="btnFinish_Click" />
-                </Grid>
-            </StackPanel>
-        </ScrollViewer>
-    </Grid>
-</Page>

+ 0 - 183
winrt/SDLPal.WindowsPhone/MainPage.xaml.cpp

@@ -1,183 +0,0 @@
-//
-// MainPage.xaml.cpp
-// MainPage 类的实现。
-//
-
-#include "pch.h"
-#include "MainPage.xaml.h"
-#include "../SDLPal.Common/StringHelper.h"
-#include "../SDLPal.Common/AsyncHelper.h"
-#include "../../global.h"
-
-using namespace SDLPal;
-
-using namespace Platform;
-using namespace Windows::Foundation;
-using namespace Windows::Foundation::Collections;
-using namespace Windows::UI::Xaml;
-using namespace Windows::UI::Xaml::Controls;
-using namespace Windows::UI::Xaml::Controls::Primitives;
-using namespace Windows::UI::Xaml::Data;
-using namespace Windows::UI::Xaml::Input;
-using namespace Windows::UI::Xaml::Media;
-using namespace Windows::UI::Xaml::Navigation;
-
-
-MainPage::MainPage()
-{
-	InitializeComponent();
-	static_cast<App^>(Application::Current)->SetMainPage(this);
-	LoadControlContents();
-}
-
-void SDLPal::MainPage::SetPath(Windows::Storage::StorageFolder^ folder)
-{
-	Windows::Storage::AccessCache::StorageApplicationPermissions::MostRecentlyUsedList->Add(folder, folder->Path);
-	tbGamePath->Text = folder->Path;
-}
-
-void SDLPal::MainPage::LoadControlContents()
-{
-	if (gConfig.pszGamePath) tbGamePath->Text = ConvertString(gConfig.pszGamePath);
-	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);
-	tsSurroundOPL->IsOn = (gConfig.fUseSurroundOPL == TRUE);
-	tsTouchOverlay->IsOn = (gConfig.fUseTouchOverlay == TRUE);
-
-	slVolume->Value = gConfig.iVolume;
-	slQuality->Value = gConfig.iResampleQuality;
-
-	cbCD->SelectedIndex = (gConfig.eCDType == MUSIC_MP3) ? 0 : 1;
-	if (gConfig.eMusicType == MUSIC_OGG)
-		cbBGM->SelectedIndex = 2;
-	else if (gConfig.eMusicType == MUSIC_MP3)
-		cbBGM->SelectedIndex = 1;
-	else
-		cbBGM->SelectedIndex = 0;
-	cbOPL->SelectedIndex = (int)gConfig.eOPLType;
-
-	if (gConfig.iSampleRate <= 11025)
-		cbSampleRate->SelectedIndex = 0;
-	else if (gConfig.iSampleRate <= 22050)
-		cbSampleRate->SelectedIndex = 1;
-	else
-		cbSampleRate->SelectedIndex = 2;
-
-	if (gConfig.wAudioBufferSize <= 512)
-		cbAudioBuffer->SelectedIndex = 0;
-	else if (gConfig.wAudioBufferSize == 1024)
-		cbAudioBuffer->SelectedIndex = 1;
-	else if (gConfig.wAudioBufferSize == 2048)
-		cbAudioBuffer->SelectedIndex = 2;
-	else
-		cbAudioBuffer->SelectedIndex = 3;
-
-	if (gConfig.iOPLSampleRate <= 12429)
-		cbOPLSR->SelectedIndex = 0;
-	else if (gConfig.iSampleRate <= 24858)
-		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()
-{
-	std::wstring path;
-
-	if (gConfig.pszGamePath) free(gConfig.pszGamePath);
-	path.assign(tbGamePath->Text->Data());
-	if (path.back() != '\\') path.append(L"\\");
-	gConfig.pszGamePath = strdup(ConvertString(path).c_str());
-
-	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;
-	gConfig.fUseSurroundOPL = tsSurroundOPL->IsOn ? TRUE : FALSE;
-	gConfig.fUseTouchOverlay = tsTouchOverlay->IsOn ? TRUE : FALSE;
-
-	gConfig.iVolume = (int)slVolume->Value;
-	gConfig.iResampleQuality = (int)slQuality->Value;
-	gConfig.uCodePage = tsLanguage->IsOn ? CP_GBK : CP_BIG5;
-
-	gConfig.eCDType = (MUSICTYPE)(MUSIC_MP3 + cbCD->SelectedIndex);
-	gConfig.eMusicType = (cbBGM->SelectedIndex >= 1) ? (MUSICTYPE)(MUSIC_MP3 + cbBGM->SelectedIndex) : MUSIC_RIX;
-	gConfig.eOPLType = (OPLTYPE)cbOPL->SelectedIndex;
-
-	gConfig.iSampleRate = wcstoul(static_cast<Platform::String^>(static_cast<ComboBoxItem^>(cbSampleRate->SelectedItem)->Content)->Data(), nullptr, 10);
-	gConfig.iOPLSampleRate = wcstoul(static_cast<Platform::String^>(static_cast<ComboBoxItem^>(cbOPLSR->SelectedItem)->Content)->Data(), nullptr, 10);
-	gConfig.wAudioBufferSize = wcstoul(static_cast<Platform::String^>(static_cast<ComboBoxItem^>(cbAudioBuffer->SelectedItem)->Content)->Data(), nullptr, 10);
-}
-
-void SDLPal::MainPage::btnBrowse_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-	auto picker = ref new Windows::Storage::Pickers::FolderPicker();
-	picker->PickFolderAndContinue();
-}
-
-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;
-	cbOPL->Visibility = visibility;
-	cbOPLSR->Visibility = visibility;
-	tsSurroundOPL->Visibility = visibility;
-}
-
-
-void SDLPal::MainPage::btnReset_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
-{
-	PAL_LoadConfig(FALSE);
-	LoadControlContents();
-}
-
-
-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)
-	{
-		SaveControlContents();
-		auto handler = ref new Windows::UI::Popups::UICommandInvokedHandler(this, &MainPage::CloseUICommandHandler);
-		auto dlg = ref new Windows::UI::Popups::MessageDialog(loader->GetString("MBExitContent"));
-		dlg->Commands->Append(ref new Windows::UI::Popups::UICommand(loader->GetString("MBYes"), handler, safe_cast<Platform::Object^>(0)));
-		dlg->Commands->Append(ref new Windows::UI::Popups::UICommand(loader->GetString("MBNo"), handler, safe_cast<Platform::Object^>(1)));
-		dlg->ShowAsync();
-	}
-	else
-	{
-		(ref new Windows::UI::Popups::MessageDialog(loader->GetString("MBEmptyContent")))->ShowAsync();
-	}
-}
-
-void SDLPal::MainPage::CloseUICommandHandler(Windows::UI::Popups::IUICommand^ command)
-{
-	gConfig.fLaunchSetting = ((int)command->Id == 0);
-	PAL_SaveConfig();
-	Application::Current->Exit();
-}

+ 0 - 4
winrt/SDLPal.WindowsPhone/Package.appxmanifest

@@ -40,8 +40,4 @@
       </Extensions>
     </Application>
   </Applications>
-  <Capabilities>
-    <Capability Name="removableStorage" />
-    <Capability Name="picturesLibrary" />
-  </Capabilities>
 </Package>

+ 4 - 4
winrt/SDLPal.WindowsPhone/SDLPal.Core.vcxproj

@@ -83,7 +83,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PAL_HAS_PLATFORM_SPECIFIC_UTILS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
@@ -98,7 +98,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PAL_HAS_PLATFORM_SPECIFIC_UTILS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
@@ -113,7 +113,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
     <ClCompile>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PAL_HAS_PLATFORM_SPECIFIC_UTILS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>
@@ -128,7 +128,7 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
     <ClCompile>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PAL_HAS_PLATFORM_SPECIFIC_UTILS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <AdditionalIncludeDirectories>..\..\liboggvorbis\include;$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <CompileAsWinRT>false</CompileAsWinRT>

+ 18 - 12
winrt/SDLPal.WindowsPhone/SDLPal.vcxproj

@@ -98,6 +98,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -110,6 +111,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -122,6 +124,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlibd.lib;msvcrtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -134,6 +137,7 @@
       <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
       <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
       <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\SDLPal.Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <AdditionalDependencies>dxgi.lib;dxguid.lib;sdlpal.core.lib;sdlpal.common.lib;vccorlib.lib;msvcrt.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -193,12 +197,12 @@
     <Image Include="Assets\WideLogo.scale-240.png" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
+    </ClCompile>
     <ClCompile Include="App.xaml.cpp">
       <DependentUpon>App.xaml</DependentUpon>
     </ClCompile>
-    <ClCompile Include="MainPage.xaml.cpp">
-      <DependentUpon>MainPage.xaml</DependentUpon>
-    </ClCompile>
     <ClCompile Include="pch.cpp">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
@@ -220,23 +224,25 @@
     <ApplicationDefinition Include="App.xaml">
       <FileType>Document</FileType>
     </ApplicationDefinition>
-    <Page Include="MainPage.xaml">
-      <SubType>Designer</SubType>
-    </Page>
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h" />
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h">
+      <DependentUpon>..\SDLPal.Common\MainPage.xaml</DependentUpon>
+    </ClInclude>
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h" />
     <ClInclude Include="App.xaml.h">
       <DependentUpon>App.xaml</DependentUpon>
     </ClInclude>
-    <ClInclude Include="MainPage.xaml.h">
-      <DependentUpon>MainPage.xaml</DependentUpon>
-    </ClInclude>
     <ClInclude Include="pch.h" />
   </ItemGroup>
   <ItemGroup>
-    <PRIResource Include="Strings\en\Resources.resw" />
-    <PRIResource Include="Strings\zh-hans\Resources.resw" />
-    <PRIResource Include="Strings\zh-hant\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw" />
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="..\SDLPal.Common\MainPage.xaml" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">

+ 23 - 10
winrt/SDLPal.WindowsPhone/SDLPal.vcxproj.filters

@@ -35,13 +35,20 @@
     <Filter Include="Strings\zh-hant">
       <UniqueIdentifier>{1a1bb392-d3b3-4c82-a811-f6cfabd43f9a}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Common">
+      <UniqueIdentifier>{d9849604-02e7-4f89-8f18-2d7bc9281159}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp" />
-    <ClCompile Include="..\SDLPal.Common\SDLPal.cpp" />
     <ClCompile Include="pch.cpp" />
     <ClCompile Include="App.xaml.cpp" />
-    <ClCompile Include="MainPage.xaml.cpp" />
+    <ClCompile Include="..\SDLPal.Common\SDLPal.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\SDLPal.Common\WinRTUtil.cpp">
+      <Filter>Common</Filter>
+    </ClCompile>
+    <ClCompile Include="..\SDLPal.Common\MainPage.xaml.cpp" />
   </ItemGroup>
   <ItemGroup>
     <AppxManifest Include="Package.appxmanifest" />
@@ -84,26 +91,32 @@
       <Filter>资产</Filter>
     </Image>
   </ItemGroup>
-  <ItemGroup>
-    <Page Include="MainPage.xaml" />
-  </ItemGroup>
   <ItemGroup>
     <ClInclude Include="pch.h" />
     <ClInclude Include="App.xaml.h" />
-    <ClInclude Include="MainPage.xaml.h" />
+    <ClInclude Include="..\SDLPal.Common\AsyncHelper.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\SDLPal.Common\StringHelper.h">
+      <Filter>Common</Filter>
+    </ClInclude>
+    <ClInclude Include="..\SDLPal.Common\MainPage.xaml.h" />
   </ItemGroup>
   <ItemGroup>
     <ApplicationDefinition Include="App.xaml" />
   </ItemGroup>
   <ItemGroup>
-    <PRIResource Include="Strings\en\Resources.resw">
+    <PRIResource Include="..\SDLPal.Common\Strings\en\Resources.resw">
       <Filter>Strings\en</Filter>
     </PRIResource>
-    <PRIResource Include="Strings\zh-hans\Resources.resw">
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hans\Resources.resw">
       <Filter>Strings\zh-hans</Filter>
     </PRIResource>
-    <PRIResource Include="Strings\zh-hant\Resources.resw">
+    <PRIResource Include="..\SDLPal.Common\Strings\zh-hant\Resources.resw">
       <Filter>Strings\zh-hant</Filter>
     </PRIResource>
   </ItemGroup>
+  <ItemGroup>
+    <Page Include="..\SDLPal.Common\MainPage.xaml" />
+  </ItemGroup>
 </Project>

+ 0 - 258
winrt/SDLPal.WindowsPhone/Strings/zh-hans/Resources.resw

@@ -1,258 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="AspectRatio.Header" xml:space="preserve">
-    <value>保持纵横比</value>
-  </data>
-  <data name="AspectRatio.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="AspectRatio.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="AudioBuffer.Header" xml:space="preserve">
-    <value>音频缓冲区大小</value>
-  </data>
-  <data name="AudioBuffer.PlaceholderText" xml:space="preserve">
-    <value>音频缓冲区大小</value>
-  </data>
-  <data name="BGM.Header" xml:space="preserve">
-    <value>背景音乐格式</value>
-  </data>
-  <data name="BGM.PlaceholderText" xml:space="preserve">
-    <value>背景音乐格式</value>
-  </data>
-  <data name="ButtonBrowse.Content" xml:space="preserve">
-    <value>浏览文件夹</value>
-  </data>
-  <data name="ButtonDefault.Content" xml:space="preserve">
-    <value>默认设置</value>
-  </data>
-  <data name="ButtonFinish.Content" xml:space="preserve">
-    <value>完成设置</value>
-  </data>
-  <data name="CD.Header" xml:space="preserve">
-    <value>CD 音轨格式</value>
-  </data>
-  <data name="CD.PlaceholderText" xml:space="preserve">
-    <value>CD 音轨格式</value>
-  </data>
-  <data name="DOS.Header" xml:space="preserve">
-    <value>游戏资源版本</value>
-  </data>
-  <data name="DOS.OffContent" xml:space="preserve">
-    <value>WIN95</value>
-  </data>
-  <data name="DOS.OnContent" xml:space="preserve">
-    <value>DOS</value>
-  </data>
-  <data name="EmbeddedFont.Header" xml:space="preserve">
-    <value>使用游戏资源内置字体</value>
-  </data>
-  <data name="EmbeddedFont.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="EmbeddedFont.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="GamePath.Header" xml:space="preserve">
-    <value>游戏资源文件夹</value>
-  </data>
-  <data name="GamePath.PlaceholderText" xml:space="preserve">
-    <value>游戏资源文件夹</value>
-  </data>
-  <data name="Language.Header" xml:space="preserve">
-    <value>游戏资源语言</value>
-  </data>
-  <data name="Language.OffContent" xml:space="preserve">
-    <value>繁体中文</value>
-  </data>
-  <data name="Language.OnContent" xml:space="preserve">
-    <value>简体中文</value>
-  </data>
-  <data name="MBEmptyContent" xml:space="preserve">
-    <value>必须指定游戏资源文件夹!</value>
-  </data>
-  <data name="MBExitContent" xml:space="preserve">
-    <value>下次启动时要进入配置界面吗?</value>
-  </data>
-  <data name="MBNo" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="MBYes" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="MessageFile.Header" xml:space="preserve">
-    <value>自定义语言文件</value>
-  </data>
-  <data name="MessageFile.PlaceholderText" xml:space="preserve">
-    <value>自定义语言文件</value>
-  </data>
-  <data name="OPL.Header" xml:space="preserve">
-    <value>OPL 模拟器</value>
-  </data>
-  <data name="OPL.PlaceholderText" xml:space="preserve">
-    <value>OPL 模拟器</value>
-  </data>
-  <data name="OPLSR.Header" xml:space="preserve">
-    <value>OPL 模拟器采样率</value>
-  </data>
-  <data name="OPLSR.PlaceholderText" xml:space="preserve">
-    <value>OPL 模拟器采样率</value>
-  </data>
-  <data name="Quality.Header" xml:space="preserve">
-    <value>音频质量</value>
-  </data>
-  <data name="Samplerate.Header" xml:space="preserve">
-    <value>音频输出采样率</value>
-  </data>
-  <data name="Samplerate.PlaceholderText" xml:space="preserve">
-    <value>音频输出采样率</value>
-  </data>
-  <data name="Stereo.Header" xml:space="preserve">
-    <value>立体声</value>
-  </data>
-  <data name="Stereo.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="Stereo.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="SurroundOPL.Header" xml:space="preserve">
-    <value>环绕声 OPL</value>
-  </data>
-  <data name="SurroundOPL.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="SurroundOPL.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="TouchOverlay.Header" xml:space="preserve">
-    <value>启用触屏辅助</value>
-  </data>
-  <data name="TouchOverlay.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="TouchOverlay.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="Volume.Header" xml:space="preserve">
-    <value>音量</value>
-  </data>
-</root>

+ 0 - 258
winrt/SDLPal.WindowsPhone/Strings/zh-hant/Resources.resw

@@ -1,258 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <data name="AspectRatio.Header" xml:space="preserve">
-    <value>保持縱橫比</value>
-  </data>
-  <data name="AspectRatio.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="AspectRatio.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="AudioBuffer.Header" xml:space="preserve">
-    <value>音訊緩衝區大小</value>
-  </data>
-  <data name="AudioBuffer.PlaceholderText" xml:space="preserve">
-    <value>音訊緩衝區大小</value>
-  </data>
-  <data name="BGM.Header" xml:space="preserve">
-    <value>背景音樂格式</value>
-  </data>
-  <data name="BGM.PlaceholderText" xml:space="preserve">
-    <value>背景音樂格式</value>
-  </data>
-  <data name="ButtonBrowse.Content" xml:space="preserve">
-    <value>瀏覽資料夾</value>
-  </data>
-  <data name="ButtonDefault.Content" xml:space="preserve">
-    <value>默認設定</value>
-  </data>
-  <data name="ButtonFinish.Content" xml:space="preserve">
-    <value>完成設定</value>
-  </data>
-  <data name="CD.Header" xml:space="preserve">
-    <value>CD 音軌格式</value>
-  </data>
-  <data name="CD.PlaceholderText" xml:space="preserve">
-    <value>CD 音軌格式</value>
-  </data>
-  <data name="DOS.Header" xml:space="preserve">
-    <value>遊戲資源版本</value>
-  </data>
-  <data name="DOS.OffContent" xml:space="preserve">
-    <value>WIN95</value>
-  </data>
-  <data name="DOS.OnContent" xml:space="preserve">
-    <value>DOS</value>
-  </data>
-  <data name="EmbeddedFont.Header" xml:space="preserve">
-    <value>使用遊戲資源內置字體</value>
-  </data>
-  <data name="EmbeddedFont.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="EmbeddedFont.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="GamePath.Header" xml:space="preserve">
-    <value>遊戲資源檔夾</value>
-  </data>
-  <data name="GamePath.PlaceholderText" xml:space="preserve">
-    <value>遊戲資源檔夾</value>
-  </data>
-  <data name="Language.Header" xml:space="preserve">
-    <value>遊戲資源語言</value>
-  </data>
-  <data name="Language.OffContent" xml:space="preserve">
-    <value>繁體中文</value>
-  </data>
-  <data name="Language.OnContent" xml:space="preserve">
-    <value>簡體中文</value>
-  </data>
-  <data name="MBEmptyContent" xml:space="preserve">
-    <value>必須指定遊戲資源檔夾!</value>
-  </data>
-  <data name="MBExitContent" xml:space="preserve">
-    <value>下次啟動時要進入設定介面嗎?</value>
-  </data>
-  <data name="MBNo" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="MBYes" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="MessageFile.Header" xml:space="preserve">
-    <value>自訂語言檔</value>
-  </data>
-  <data name="MessageFile.PlaceholderText" xml:space="preserve">
-    <value>自訂語言檔</value>
-  </data>
-  <data name="OPL.Header" xml:space="preserve">
-    <value>OPL 模擬器</value>
-  </data>
-  <data name="OPL.PlaceholderText" xml:space="preserve">
-    <value>OPL 模擬器</value>
-  </data>
-  <data name="OPLSR.Header" xml:space="preserve">
-    <value>OPL 模擬器取樣速率</value>
-  </data>
-  <data name="OPLSR.PlaceholderText" xml:space="preserve">
-    <value>OPL 模擬器取樣速率</value>
-  </data>
-  <data name="Quality.Header" xml:space="preserve">
-    <value>音訊品質</value>
-  </data>
-  <data name="Samplerate.Header" xml:space="preserve">
-    <value>音訊輸出取樣速率</value>
-  </data>
-  <data name="Samplerate.PlaceholderText" xml:space="preserve">
-    <value>音訊輸出取樣速率</value>
-  </data>
-  <data name="Stereo.Header" xml:space="preserve">
-    <value>立體聲</value>
-  </data>
-  <data name="Stereo.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="Stereo.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="SurroundOPL.Header" xml:space="preserve">
-    <value>環繞聲 OPL</value>
-  </data>
-  <data name="SurroundOPL.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="SurroundOPL.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="TouchOverlay.Header" xml:space="preserve">
-    <value>啟用觸屏輔助</value>
-  </data>
-  <data name="TouchOverlay.OffContent" xml:space="preserve">
-    <value>否</value>
-  </data>
-  <data name="TouchOverlay.OnContent" xml:space="preserve">
-    <value>是</value>
-  </data>
-  <data name="Volume.Header" xml:space="preserve">
-    <value>音量</value>
-  </data>
-</root>