1.0版本初版

This commit is contained in:
sin365 2025-04-06 23:14:01 +08:00
parent 0f774f13c7
commit 09213f841e
7 changed files with 299 additions and 56 deletions

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<NintendoSdkMeta>
<Core>
<Name>Application</Name>
<Is64BitInstruction>True</Is64BitInstruction>
<ApplicationId>0x0100353370010000</ApplicationId>
<ProgramIndex>0</ProgramIndex>
<MainThreadStackSize>0x00100000</MainThreadStackSize>
<ProcessAddressSpace>AddressSpace64Bit</ProcessAddressSpace>
<SystemResourceSize>0x01000000</SystemResourceSize>
</Core>
<Application>
<Title>
<Language>AmericanEnglish</Language>
<Name>MotaForSwitch</Name>
<Publisher>Axibug.com</Publisher>
</Title>
<Icon>
<Language>AmericanEnglish</Language>
<IconPath>Assets\Resources\UI\mota_bmp.bmp</IconPath>
</Icon>
<ReleaseVersion>0</ReleaseVersion>
<DisplayVersion>0.1</DisplayVersion>
<StartupUserAccount>Required</StartupUserAccount>
<UserAccountSwitchLock>Disable</UserAccountSwitchLock>
<SupportedLanguage>AmericanEnglish</SupportedLanguage>
<Screenshot>Allow</Screenshot>
<DataLossConfirmation>None</DataLossConfirmation>
<UserAccountSaveDataSize>0x00000000004b0000</UserAccountSaveDataSize>
<UserAccountSaveDataJournalSize>0x00000000004b0000</UserAccountSaveDataJournalSize>
<LogoType>LicensedByNintendo</LogoType>
<LogoHandling>Auto</LogoHandling>
<Rating>
<Organization>ESRB</Organization>
<Age>0</Age>
</Rating>
<VideoCapture>Enable</VideoCapture>
<RuntimeAddOnContentInstall>Deny</RuntimeAddOnContentInstall>
<CrashReport>Allow</CrashReport>
<CrashScreenshotForProd>Deny</CrashScreenshotForProd>
<CrashScreenshotForDev>Deny</CrashScreenshotForDev>
<PlayLogQueryCapability>None</PlayLogQueryCapability>
<PlayLogPolicy>Open</PlayLogPolicy>
</Application>
<CardSpec>
<Size>4</Size>
<ClockRate>25</ClockRate>
</CardSpec>
</NintendoSdkMeta>

View File

@ -153,7 +153,7 @@ namespace AxibugEmuOnline.Editors
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"解包NSP文件", 0.2f); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"解包NSP文件", 0.2f);
#region NSP文件 #region NSP文件
string extractPath = Path.Combine(nspParentDir, "repacker_extract"); 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 controlPath = null;
string programPath = null; string programPath = null;
@ -168,13 +168,13 @@ namespace AxibugEmuOnline.Editors
#region NCA/NSP #region NCA/NSP
string tmpPath = Path.Combine(Path.GetTempPath(), "NCA"); string tmpPath = Path.Combine(Path.GetTempPath(), "NCA");
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NCA", 0.6f); 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); 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); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NCA", 0.8f);
BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA); BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA, nspParentDir);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 0.9f); 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); EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 1f);
Debug.Log($"[AxibugNSPTools]Repacking completed: {outputNSP}"); Debug.Log($"[AxibugNSPTools]Repacking completed: {outputNSP}");
EditorUtility.ClearProgressBar(); 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() var process = new System.Diagnostics.Process()
{ {
@ -228,7 +228,8 @@ namespace AxibugEmuOnline.Editors
UseShellExecute = false, UseShellExecute = false,
CreateNoWindow = true, CreateNoWindow = true,
StandardOutputEncoding = Encoding.UTF8, // 明确指定编码 StandardOutputEncoding = Encoding.UTF8, // 明确指定编码
StandardErrorEncoding = Encoding.UTF8 StandardErrorEncoding = Encoding.UTF8,
WorkingDirectory = workdir
} }
}; };
@ -275,36 +276,36 @@ namespace AxibugEmuOnline.Editors
#endregion #endregion
#region NCA构建逻辑 #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} " + string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype program --exefsdir \"{programDir}/fs0\" " + $"--type nca --ncatype program --exefsdir \"{programDir}/fs0\" " +
$"--romfsdir \"{programDir}/fs1\" --logodir \"{programDir}/fs2\""; $"--romfsdir \"{programDir}/fs1\" --logodir \"{programDir}/fs2\"";
string output = ExecuteCommand($"{tools["hacPack"]} {args}"); string output = ExecuteCommand($"{tools["hacPack"]} {args}", workdir);
return ParseNCAOutput(output, "Program"); 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} " + string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype control --romfsdir \"{controlDir}/fs0\""; $"--type nca --ncatype control --romfsdir \"{controlDir}/fs0\"";
string output = ExecuteCommand($"{tools["hacPack"]} {args}"); string output = ExecuteCommand($"{tools["hacPack"]} {args}", workdir);
return ParseNCAOutput(output, "Control"); 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} " + string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype meta --titletype application " + $"--type nca --ncatype meta --titletype application " +
$"--programnca \"{programNCA}\" --controlnca \"{controlNCA}\""; $"--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"); string outputPath = origPath.Replace(".nsp", "_repacked.nsp");
if (File.Exists(outputPath)) File.Delete(outputPath); if (File.Exists(outputPath)) File.Delete(outputPath);
@ -312,7 +313,7 @@ namespace AxibugEmuOnline.Editors
string args = $"-k \"{prodKeysPath}\" -o \"{parentDir}\" --titleid {titleID} " + string args = $"-k \"{prodKeysPath}\" -o \"{parentDir}\" --titleid {titleID} " +
$"--type nsp --ncadir \"{tmpPath}\""; $"--type nsp --ncadir \"{tmpPath}\"";
ExecuteCommand($"{tools["hacPack"]} {args}"); ExecuteCommand($"{tools["hacPack"]} {args}", workdir);
File.Move(Path.Combine(parentDir, $"{titleID}.nsp"), outputPath); File.Move(Path.Combine(parentDir, $"{titleID}.nsp"), outputPath);
return outputPath; return outputPath;
} }

View File

@ -6,7 +6,7 @@ public class DebugOpen : MonoBehaviour {
void Awake() void Awake()
{ {
//debugger.gameObject.SetActive(false); debugger.gameObject.SetActive(false);
} }
// Update is called once per frame // Update is called once per frame

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

After

Width:  |  Height:  |  Size: 3.0 MiB

View File

@ -178,15 +178,19 @@ PrefabInstance:
m_Modifications: m_Modifications:
- target: {fileID: 1324954596340382, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1324954596340382, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive 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} objectReference: {fileID: 0}
- target: {fileID: 1415688944016792, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1415688944016792, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1421527332497682, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1421527332497682, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1468129329204906, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1468129329204906, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
@ -194,7 +198,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1540643717999602, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1540643717999602, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1630868967767418, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1630868967767418, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Name propertyPath: m_Name
@ -202,7 +206,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1833386471943342, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1833386471943342, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1835352083401536, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1835352083401536, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
@ -210,11 +214,15 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1850144160971538, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1850144160971538, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 1 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1950172798394216, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 1950172798394216, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive 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} objectReference: {fileID: 0}
- target: {fileID: 114008412063749700, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 114008412063749700, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize propertyPath: m_FontData.m_FontSize
@ -384,11 +392,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.x propertyPath: m_AnchorMin.x
@ -404,19 +412,19 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: 3
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y propertyPath: m_AnchorMin.y
@ -464,7 +472,19 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y 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} objectReference: {fileID: 0}
- target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
@ -528,11 +548,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224349029260223910, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224349029260223910, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
@ -540,11 +560,23 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x 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} objectReference: {fileID: 0}
- target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
@ -696,19 +728,19 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y propertyPath: m_AnchorMin.y
@ -766,6 +798,18 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: -15 value: -15
objectReference: {fileID: 0} 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} - target: {fileID: 224637299749416518, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: 44 value: 44
@ -796,19 +840,19 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y propertyPath: m_AnchorMax.y
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
@ -844,12 +888,24 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 0 value: 30
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: -170.0001 value: -170.0001
objectReference: {fileID: 0} 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} - target: {fileID: 224783682016277658, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 107.7 value: 107.7
@ -866,10 +922,46 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: -5 value: -5
objectReference: {fileID: 0} 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} - target: {fileID: 224885472704193994, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y propertyPath: m_SizeDelta.y
value: 59.7307 value: 59.7307
objectReference: {fileID: 0} 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} - target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x propertyPath: m_LocalScale.x
value: 1 value: 1
@ -912,11 +1004,11 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x propertyPath: m_AnchorMax.x
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3} - target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x propertyPath: m_SizeDelta.x
value: 0 value: -17
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []

View File

@ -392,7 +392,7 @@ PlayerSettings:
microphoneUsageDescription: microphoneUsageDescription:
bluetoothUsageDescription: bluetoothUsageDescription:
macOSTargetOSVersion: 10.13.0 macOSTargetOSVersion: 10.13.0
switchNMETAOverride: switchNMETAOverride: Application.aarch64.lp64.nmeta
switchNetLibKey: switchNetLibKey:
switchSocketMemoryPoolSize: 6144 switchSocketMemoryPoolSize: 6144
switchSocketAllocatorPoolSize: 128 switchSocketAllocatorPoolSize: 128

103
README.md
View File

@ -1,3 +1,104 @@
# MotaForSwitch # MotaForSwitch
魔塔经典游戏-移植到Nintendo Switch项目 *`本项目仅作技术研究因为合规原因本文不提供任何法律敏感和版权相关的诸如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