diff --git a/Application.aarch64.lp64.nmeta b/Application.aarch64.lp64.nmeta new file mode 100644 index 0000000..342e3b1 --- /dev/null +++ b/Application.aarch64.lp64.nmeta @@ -0,0 +1,49 @@ + + + + Application + True + 0x0100353370010000 + 0 + 0x00100000 + AddressSpace64Bit + 0x01000000 + + + + <Language>AmericanEnglish</Language> + <Name>MotaForSwitch</Name> + <Publisher>Axibug.com</Publisher> + + + AmericanEnglish + Assets\Resources\UI\mota_bmp.bmp + + 0 + 0.1 + Required + Disable + AmericanEnglish + Allow + None + 0x00000000004b0000 + 0x00000000004b0000 + LicensedByNintendo + Auto + + ESRB + 0 + + Enable + Deny + Allow + Deny + Deny + None + Open + + + 4 + 25 + + \ No newline at end of file diff --git a/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs b/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs index c9e192f..27b5510 100644 --- a/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs +++ b/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs @@ -11,7 +11,7 @@ using UnityEngine; namespace AxibugEmuOnline.Editors { - public class AxibugNSPTools : Editor + public class AxibugNSPTools : Editor { static string WorkRoot = Path.GetFullPath(Path.Combine(Application.dataPath, "AxiProjectTools/AxiNSPack")); static string switch_keys = Path.GetFullPath(Path.Combine(Application.dataPath, "AxiProjectTools/AxiNSPack/switch_keys")); @@ -120,9 +120,9 @@ namespace AxibugEmuOnline.Editors static void RepackNSP(string nspFile) { - #region ʼ· - // ȡҪӻ飩 - string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT"); + #region ʼ· + // ȡҪӻ飩 + string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT"); tools["authoringTool"] = Path.Combine(sdkRoot, "Tools/CommandLineTools/AuthoringTool/AuthoringTool.exe"); tools["hacPack"] = Path.Combine(hacpack_root, "hacpack"); #endregion @@ -153,7 +153,7 @@ namespace AxibugEmuOnline.Editors EditorUtility.DisplayProgressBar("AxibugNSPTools", $"NSPļ", 0.2f); #region NSPļ string extractPath = Path.Combine(nspParentDir, "repacker_extract"); - ExecuteCommand($"{tools["authoringTool"]} extract -o \"{extractPath}\" \"{nspFilePath}\""); + ExecuteCommand($"{tools["authoringTool"]} extract -o \"{extractPath}\" \"{nspFilePath}\"", nspParentDir); string controlPath = null; string programPath = null; @@ -168,13 +168,13 @@ namespace AxibugEmuOnline.Editors #region ؽNCA/NSP string tmpPath = Path.Combine(Path.GetTempPath(), "NCA"); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"ؽNCA", 0.6f); - string programNCA = BuildProgramNCA(tmpPath, titleID, programPath); + string programNCA = BuildProgramNCA(tmpPath, titleID, programPath, nspParentDir); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"ؽNCA", 0.7f); - string controlNCA = BuildControlNCA(tmpPath, titleID, controlPath); + string controlNCA = BuildControlNCA(tmpPath, titleID, controlPath, nspParentDir); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"ؽNCA", 0.8f); - BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA); + BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA, nspParentDir); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"ؽNSP", 0.9f); - string outputNSP = BuildFinalNSP(nspFilePath, nspParentDir, tmpPath, titleID); + string outputNSP = BuildFinalNSP(nspFilePath, nspParentDir, tmpPath, titleID, nspParentDir); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"ؽNSP", 1f); Debug.Log($"[AxibugNSPTools]Repacking completed: {outputNSP}"); EditorUtility.ClearProgressBar(); @@ -215,7 +215,7 @@ namespace AxibugEmuOnline.Editors } } - static string ExecuteCommand(string command) + static string ExecuteCommand(string command,string workdir) { var process = new System.Diagnostics.Process() { @@ -228,8 +228,9 @@ namespace AxibugEmuOnline.Editors UseShellExecute = false, CreateNoWindow = true, StandardOutputEncoding = Encoding.UTF8, // ȷָ - StandardErrorEncoding = Encoding.UTF8 - } + StandardErrorEncoding = Encoding.UTF8, + WorkingDirectory = workdir + } }; var outputBuilder = new StringBuilder(); @@ -275,44 +276,44 @@ namespace AxibugEmuOnline.Editors #endregion #region NCA߼ - static string BuildProgramNCA(string tmpPath, string titleID, string programDir) - { + static string BuildProgramNCA(string tmpPath, string titleID, string programDir, string workdir) + { string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " + $"--type nca --ncatype program --exefsdir \"{programDir}/fs0\" " + $"--romfsdir \"{programDir}/fs1\" --logodir \"{programDir}/fs2\""; - string output = ExecuteCommand($"{tools["hacPack"]} {args}"); + string output = ExecuteCommand($"{tools["hacPack"]} {args}", workdir); return ParseNCAOutput(output, "Program"); } - static string BuildControlNCA(string tmpPath, string titleID, string controlDir) - { + static string BuildControlNCA(string tmpPath, string titleID, string controlDir, string workdir) + { string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " + $"--type nca --ncatype control --romfsdir \"{controlDir}/fs0\""; - string output = ExecuteCommand($"{tools["hacPack"]} {args}"); + string output = ExecuteCommand($"{tools["hacPack"]} {args}", workdir); return ParseNCAOutput(output, "Control"); } - static void BuildMetaNCA(string tmpPath, string titleID, string programNCA, string controlNCA) - { + static void BuildMetaNCA(string tmpPath, string titleID, string programNCA, string controlNCA, string workdir) + { string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " + $"--type nca --ncatype meta --titletype application " + $"--programnca \"{programNCA}\" --controlnca \"{controlNCA}\""; - ExecuteCommand($"{tools["hacPack"]} {args}"); + ExecuteCommand($"{tools["hacPack"]} {args}", workdir); } - static string BuildFinalNSP(string origPath, string parentDir, string tmpPath, string titleID) - { + static string BuildFinalNSP(string origPath, string parentDir, string tmpPath, string titleID, string workdir) + { string outputPath = origPath.Replace(".nsp", "_repacked.nsp"); if (File.Exists(outputPath)) File.Delete(outputPath); string args = $"-k \"{prodKeysPath}\" -o \"{parentDir}\" --titleid {titleID} " + $"--type nsp --ncadir \"{tmpPath}\""; - ExecuteCommand($"{tools["hacPack"]} {args}"); + ExecuteCommand($"{tools["hacPack"]} {args}", workdir); File.Move(Path.Combine(parentDir, $"{titleID}.nsp"), outputPath); return outputPath; } diff --git a/Assets/DebugOpen.cs b/Assets/DebugOpen.cs index 950972f..a25f44c 100644 --- a/Assets/DebugOpen.cs +++ b/Assets/DebugOpen.cs @@ -6,7 +6,7 @@ public class DebugOpen : MonoBehaviour { void Awake() { - //debugger.gameObject.SetActive(false); + debugger.gameObject.SetActive(false); } // Update is called once per frame diff --git a/Assets/Resources/UI/mota_bmp.bmp b/Assets/Resources/UI/mota_bmp.bmp index 6bde703..e0959eb 100644 Binary files a/Assets/Resources/UI/mota_bmp.bmp and b/Assets/Resources/UI/mota_bmp.bmp differ diff --git a/Assets/Scenes/Level.unity b/Assets/Scenes/Level.unity index 2fe5045..332ba16 100644 --- a/Assets/Scenes/Level.unity +++ b/Assets/Scenes/Level.unity @@ -178,15 +178,19 @@ PrefabInstance: m_Modifications: - target: {fileID: 1324954596340382, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1384417688741412, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_IsActive + value: 0 objectReference: {fileID: 0} - target: {fileID: 1415688944016792, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1421527332497682, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1468129329204906, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive @@ -194,7 +198,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1540643717999602, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1630868967767418, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_Name @@ -202,7 +206,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1833386471943342, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1835352083401536, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive @@ -210,11 +214,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1850144160971538, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1950172798394216, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114003415257903934, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_Text + value: 132132164984984 objectReference: {fileID: 0} - target: {fileID: 114008412063749700, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_FontData.m_FontSize @@ -384,11 +392,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMin.x @@ -404,19 +412,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x - value: 0 + value: 3 objectReference: {fileID: 0} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: -17 objectReference: {fileID: 0} - target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMin.y @@ -464,7 +472,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 objectReference: {fileID: 0} - target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x @@ -528,11 +548,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224349029260223910, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchoredPosition.y @@ -540,11 +560,23 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x - value: 0 + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 objectReference: {fileID: 0} - target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x @@ -696,19 +728,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x - value: 0 + value: -17 objectReference: {fileID: 0} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: -17 objectReference: {fileID: 0} - target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMin.y @@ -766,6 +798,18 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -15 objectReference: {fileID: 0} + - target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} - target: {fileID: 224637299749416518, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchoredPosition.y value: 44 @@ -796,19 +840,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: -17 objectReference: {fileID: 0} - target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.y - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: -17 objectReference: {fileID: 0} - target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x @@ -844,12 +888,24 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y - value: 0 + value: 30 objectReference: {fileID: 0} - target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchoredPosition.y value: -170.0001 objectReference: {fileID: 0} + - target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} - target: {fileID: 224783682016277658, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x value: 107.7 @@ -866,10 +922,46 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -5 objectReference: {fileID: 0} + - target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} - target: {fileID: 224885472704193994, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.y value: 59.7307 objectReference: {fileID: 0} + - target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} + propertyPath: m_LocalScale.z + value: 1 + objectReference: {fileID: 0} - target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_LocalScale.x value: 1 @@ -912,11 +1004,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_AnchorMax.x - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} propertyPath: m_SizeDelta.x - value: 0 + value: -17 objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index edd5b03..eee0fa7 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -392,7 +392,7 @@ PlayerSettings: microphoneUsageDescription: bluetoothUsageDescription: macOSTargetOSVersion: 10.13.0 - switchNMETAOverride: + switchNMETAOverride: Application.aarch64.lp64.nmeta switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 diff --git a/README.md b/README.md index 6c3b372..8880e09 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,104 @@ # MotaForSwitch -魔塔经典游戏-移植到Nintendo Switch项目 \ No newline at end of file +*`本项目仅作技术研究,因为合规原因,本文不提供任何法律敏感和版权相关的诸如SDK的文件`。 + +### 介绍 + +魔塔50层复刻 移植Nintendo Switch By 皓月狩魂 + +(本项目是Unity引擎,和胖老鼠Flash版没有关系) + +之前我已有 +https://github.com/sin365/MoTaForPSVita + +### 版本 + +皓月移植作 - 《魔塔50层 For Switch》 v1.0.0 + +1.摸清Unity下Nintendo SDK的正确使用姿势,移植到Nintendo Switch。 + +2.摸清和解决Switch的存档机制使用问题,存档在Switch上使用良好。 + +3.NS的分辨率适配和平台差异。 + +4.包含我PSV版移植已解决的问题: + +PSVita Ver. 1.3.2已解决的问题: 皓月移植作 - 《魔塔 For Vita》 更新 v1.3.2 + +1.解决保存问题。退出游戏后,下次进游戏可以正常读取上次保存进入。 +2.解决一些影响通关的问题。 +3.优化性能。 + +祝游戏愉快 + +—— 皓月 2025.04.06 + +### 操作 + +移动:十字键 + +对话:A + +快速向上跳跃楼层(需取得道具):X + +快速向下跳跃楼层(需取得道具):B + +保存游戏:+ + +返回主菜单:- + +作弊:(已屏蔽) + +## 移植说明 + +### ** Nintendo Switch 移植 :皓月狩魂 ** + +基于Unity复刻版,移植Nintendo Switch游戏机 + +本项目使用之前已经成功移植到PSVita的魔塔项目,作为摸清Unity下Switch移植方式,以及代码差异。踩坑,实现在NS上游玩魔塔,为后续移植其他作品做准备。 + +实现Nintendo Switch的操作,适配NS分辨率下的各种问题 + +解决若干既有游戏的bug … ^_^ + +追加完善内容: + +1.实现了50层魔塔原版的贪婪商店功能(每次购买加价),换掉现有的随机商店。(回到了原版正常难度的味道) + +还原原版设定:初始价格是20金币,购买后会涨价,第n次购买所需金币10n*(n-1)+20 + +第4层商店每次加2点攻或4点防,12层商店每次加4点攻或8点防,32层商店每次加8点攻或16点防,46层商店每次加10点攻或20点防,以及购买次数,加价计数到Json存档 + +2.实现原版中28层上的钥匙回收商人 (替换掉28层的属性梭哈NPC) + +3.解决40层镜像传送bug + +4.长按按键移动 + +5.屏幕底部按键提示 + +## History + +### ** 日本魔塔原作者(PC-98平台): 渡部直(N.W) ** + +50层魔塔(日文:魔法の塔)是世界上第一部魔塔,于1996年12月23日由キャラバンソフトウェア设计师渡部直(N.W)发行。 + +小故事:渡部直(N.W) 之前一直以为自己的游戏根本没多少人玩,无人问津。2017年左右,知道了自己的游戏在中国是如此火爆。 +于是在网站上加了: + +著作など:ご連絡いただいた中国の方なども魔法の塔の著作に関しては気にしておられましたので、追記しておきます。  諸議論あるかと思いますが、20年以上前の作品であり、個人としては広く楽しんでいただければそれで良いかなという考えですので、 魔法の塔の二次的著作に関しては、常識の範囲で自由におこなってもらえればと思います。  Steamなどで関連作品を公開するのも自由です。 + +大概也是很大方的,说版权问题无所谓,欢迎二创。他自己也很高兴。 + +http://wwajp.com/mtower/ + +### ** Unity复刻开坑:SuYiHanr ** + +在Unity上复刻魔塔50层的基本玩法和内容 + +修改了部分NPC功能和物品属性,难度大幅降低。 + +感谢SuYiHanr的付出 + +https://gitee.com/SuYiHanr/mo-ta.git +