diff --git a/AM2RPortHelperLib/ModsBase.cs b/AM2RPortHelperLib/ModsBase.cs
index 4c30549..81416e5 100644
--- a/AM2RPortHelperLib/ModsBase.cs
+++ b/AM2RPortHelperLib/ModsBase.cs
@@ -11,6 +11,13 @@ public abstract class ModsBase
OutputHandler?.Invoke(output);
}
+ // Create before accessing anything
+ static ModsBase()
+ {
+ Directory.CreateDirectory(TempDir);
+ Directory.CreateDirectory(UtilDir);
+ }
+
///
/// A temporary directory
///
diff --git a/AM2RPortHelperLib/RawMods.cs b/AM2RPortHelperLib/RawMods.cs
index d3bd75c..3e8358e 100644
--- a/AM2RPortHelperLib/RawMods.cs
+++ b/AM2RPortHelperLib/RawMods.cs
@@ -5,6 +5,8 @@ using System.Security;
using System.Text.RegularExpressions;
using SixLabors.ImageSharp;
using UndertaleModLib;
+using UndertaleModLib.Decompiler;
+using UndertaleModLib.Models;
using static AM2RPortHelperLib.Core;
namespace AM2RPortHelperLib;
@@ -57,9 +59,13 @@ public abstract class RawMods : ModsBase
nameof(Resources.splashAndroid) + ".png" => Resources.splashAndroid,
_ => throw new InvalidDataException("SubCaseFunction was called with an improper resource!")
};
-
- Image.Load(byteArray).SaveAsPng(TempDir + "/" + resource);
- userIconPath = TempDir + "/" + resource;
+
+
+ string resPath = TempDir + "/" + resource;
+ if (File.Exists(resPath))
+ File.Delete(resPath);
+ Image.Load(byteArray).SaveAsPng(resPath);
+ userIconPath = resPath;
return userIconPath;
}
@@ -392,21 +398,21 @@ public abstract class RawMods : ModsBase
switch (currentOS)
{
case ModOS.Windows:
- File.Delete(assetsDir + "/AM2R.exe");
- File.Delete(assetsDir + "/D3DX9_43.dll");
- File.Move(assetsDir + "/data.win", assetsDir + "/game.ios");
+ File.Delete(extractDirectory + "/AM2R.exe");
+ File.Delete(extractDirectory + "/D3DX9_43.dll");
+ File.Move(extractDirectory + "/data.win", extractDirectory + "/game.ios");
break;
case ModOS.Linux:
- File.Delete(assetsDir + "/runner");
- HelperMethods.DirectoryCopy(assetsDir + "/assets", assetsDir);
- Directory.Delete(assetsDir + "/assets", true);
- File.Move(assetsDir + "/game.unx", assetsDir + "/game.ios");
+ File.Delete(extractDirectory + "/runner");
+ HelperMethods.DirectoryCopy(extractDirectory + "/assets", extractDirectory);
+ Directory.Delete(extractDirectory + "/assets", true);
+ File.Move(extractDirectory + "/game.unx", extractDirectory + "/game.ios");
break;
default: throw new NotSupportedException("The OS of the mod zip is unknown and thus not supported");
}
- File.Copy(GetProperPathToBuiltinIcons(nameof(Resources.icon), pathToIcon), extractDirectory + "/icon.png");
- File.Copy(GetProperPathToBuiltinIcons(nameof(Resources.splash), pathToSplashScreen), extractDirectory + "/splash.png");
+ File.Copy(GetProperPathToBuiltinIcons(nameof(Resources.icon), pathToIcon), extractDirectory + "/icon.png", true);
+ File.Copy(GetProperPathToBuiltinIcons(nameof(Resources.splash), pathToSplashScreen), extractDirectory + "/splash.png", true);
// Delete fonts folder if it exists, because I need to convert bytecode version from game and newer version doesn't support font loading
if (Directory.Exists(extractDirectory + "/lang/fonts"))
@@ -417,47 +423,37 @@ public abstract class RawMods : ModsBase
// Convert data.win to BC16 and get rid of not needed functions anymore
SendOutput("Editing data.win to change ByteCode version and functions...");
- string bin;
- string args;
// TODO: replace this via built-in lib
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- {
- bin = "\"" + UtilDir + "/UTMTCli/UndertaleModCli.exe\"";
- args = "";
- }
- else
+ string modName;
+ FileInfo datafile = new FileInfo(extractDirectory + "/game.ios");
+
+ // Convert data file to ByteCode 16
{
- // First chmod the file, just in case
- Process.Start("chmod", "+x \"" + UtilDir + "/UTMTCli/UndertaleModCli.dll\"");
- bin = "dotnet";
- args = "\"" + UtilDir + "/UTMTCli/UndertaleModCli.dll\" ";
- // Also chmod the runner. Just in case.
- Process.Start("chmod", "+x \"" + contentsDir + "/MacOS/Mac_Runner");
+ UndertaleData gmData;
+ using (FileStream fs = datafile.OpenRead())
+ {
+ gmData = UndertaleIO.Read(fs, SendOutput, SendOutput);
+ modName = gmData.GeneralInfo.DisplayName.Content;
+
+ ChangeToByteCode16(gmData);
+ }
+
+ using (FileStream fs = new FileInfo(extractDirectory + "/game.ios").OpenWrite())
+ {
+ UndertaleIO.Write(fs, gmData, SendOutput);
+ }
}
- ProcessStartInfo pStartInfo = new ProcessStartInfo
- {
- FileName = bin,
- Arguments = args + "load \"" + extractDirectory + "/game.ios\" -s \"" + UtilDir + "/bc16AndRemoveFunctions.csx\" -o \"" + extractDirectory + "/game.ios\"",
- CreateNoWindow = false
- };
- Process p = new Process { StartInfo = pStartInfo };
- p.Start();
- p.WaitForExit();
+ // Also chmod the runner. Just in case.
+ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ Process.Start("chmod", "+x \"" + contentsDir + "/MacOS/Mac_Runner");
// Copy assets to the place where they belong to
SendOutput("Copy files over...");
HelperMethods.DirectoryCopy(extractDirectory, assetsDir);
// Edit config and plist to change display name
- string modName;
- FileInfo datafile = new FileInfo(extractDirectory + "/game.ios");
- using (FileStream fs = datafile.OpenRead())
- {
- UndertaleData gmData = UndertaleIO.Read(fs, SendOutput, SendOutput);
- modName = gmData.GeneralInfo.DisplayName.Content;
- }
// Escape invalid xml characters
modName = SecurityElement.Escape(modName);
SendOutput("Editing Runner references to AM2R...");
@@ -482,4 +478,171 @@ public abstract class RawMods : ModsBase
// Clean up
Directory.Delete(TempDir, true);
}
+ private static void ChangeToByteCode16(UndertaleData Data)
+ {
+ if (Data is null) return;
+
+ string currentBytecodeVersion = Data?.GeneralInfo.BytecodeVersion.ToString();
+ string game_name = Data.GeneralInfo.Name.Content;
+
+ bool is13 = false;
+
+ void ScriptError(string s) => Console.WriteLine(s, ConsoleColor.Red);
+ void ScriptMessage(string s) => Console.WriteLine(s);
+
+ if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
+ {
+ ScriptError("Bytecode 13 is not supported.");
+ return;
+ }
+ if (Data?.GeneralInfo.BytecodeVersion == 14)
+ {
+ ScriptError("Bytecode 14 is not supported.");
+ return;
+ }
+
+ if (!((Data.GMS2_3 == false) && (Data.GMS2_3_1 == false) && (Data.GMS2_3_2 == false)))
+ {
+ ScriptError(game_name + "is GMS 2.3+ and is ineligible");
+ return;
+ }
+
+ if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
+ {
+ is13 = true;
+ ScriptMessage("Bytecode 13 type game detected. The upgrading of this game is experimental.");
+ currentBytecodeVersion = "13";
+ }
+
+
+ if ((Data?.GeneralInfo.BytecodeVersion == 14) || (Data?.GeneralInfo.BytecodeVersion == 15) || (is13 == true))
+ {
+ if (Data?.GeneralInfo.BytecodeVersion <= 14)
+ {
+ foreach (UndertaleCode code in Data.Code)
+ {
+ UndertaleCodeLocals locals = new UndertaleCodeLocals();
+ locals.Name = code.Name;
+
+ UndertaleCodeLocals.LocalVar argsLocal = new UndertaleCodeLocals.LocalVar();
+ argsLocal.Name = Data.Strings.MakeString("arguments");
+ argsLocal.Index = 0;
+
+ locals.Locals.Add(argsLocal);
+
+ code.LocalsCount = 1;
+ code.GenerateLocalVarDefinitions(code.FindReferencedLocalVars(), locals); // Dunno if we actually need this line, but it seems to work?
+ Data.CodeLocals.Add(locals);
+ }
+ }
+ if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
+ {
+ Data.FORM.Chunks["AGRP"] = new UndertaleChunkAGRP();
+ var previous = -1;
+ var j = 0;
+ for (var i = -1; i < Data.Sounds.Count - 1; i++)
+ {
+ UndertaleSound sound = Data.Sounds[i + 1];
+ bool flagCompressed = sound.Flags.HasFlag(UndertaleSound.AudioEntryFlags.IsCompressed);
+ bool flagEmbedded = sound.Flags.HasFlag(UndertaleSound.AudioEntryFlags.IsEmbedded);
+ if (i == -1)
+ {
+ if (!flagCompressed && !flagEmbedded)
+ {
+ sound.AudioID = -1;
+ }
+ else
+ {
+ sound.AudioID = 0;
+ previous = 0;
+ j = 1;
+ }
+ }
+ else
+ {
+ if (!flagCompressed && !flagEmbedded)
+ sound.AudioID = previous;
+ else
+ {
+ sound.AudioID = j;
+ previous = j;
+ j++;
+ }
+ }
+ }
+ foreach (UndertaleSound sound in Data.Sounds)
+ {
+ if ((sound.AudioID >= 0) && (sound.AudioID < Data.EmbeddedAudio.Count))
+ {
+ sound.AudioFile = Data.EmbeddedAudio[sound.AudioID];
+ }
+ sound.GroupID = 0;
+ }
+ Data.GeneralInfo.Build = 1804;
+ var newProductID = new byte[] { 0xBA, 0x5E, 0xBA, 0x11, 0xBA, 0xDD, 0x06, 0x60, 0xBE, 0xEF, 0xED, 0xBA, 0x0B, 0xAB, 0xBA, 0xBE };
+ Data.FORM.EXTN.productIdData.Add(newProductID);
+ Data.Options.Constants.Clear();
+ Data.Options.Constants.Add(new UndertaleOptions.Constant() { Name = Data.Strings.MakeString("@@SleepMargin"), Value = Data.Strings.MakeString(1.ToString()) });
+ Data.Options.Constants.Add(new UndertaleOptions.Constant() { Name = Data.Strings.MakeString("@@DrawColour"), Value = Data.Strings.MakeString(0xFFFFFFFF.ToString()) });
+ }
+ Data.FORM.Chunks["LANG"] = new UndertaleChunkLANG();
+ Data.FORM.LANG.Object = new UndertaleLanguage();
+ Data.FORM.Chunks["GLOB"] = new UndertaleChunkGLOB();
+ String[] order = { "GEN8", "OPTN", "LANG", "EXTN", "SOND", "AGRP", "SPRT", "BGND", "PATH", "SCPT", "GLOB", "SHDR", "FONT", "TMLN", "OBJT", "ROOM", "DAFL", "TPAG", "CODE", "VARI", "FUNC", "STRG", "TXTR", "AUDO" };
+ Dictionary newChunks = new Dictionary();
+ foreach (String name in order)
+ newChunks[name] = Data.FORM.Chunks[name];
+ Data.FORM.Chunks = newChunks;
+ Data.GeneralInfo.BytecodeVersion = 16;
+ ScriptMessage("Upgraded from " + currentBytecodeVersion + " to 16 successfully. Save the game to apply the changes.");
+ ScriptMessage("Trying to remove functions \"immersion_play_effect\", \"immersion_stop\" and \"font_replace\"!");
+
+ RemoveFunctions();
+ }
+ else if (Data?.GeneralInfo.BytecodeVersion == 17)
+ {
+ ScriptMessage("Cancelled.");
+ return;
+ }
+ else if (Data?.GeneralInfo.BytecodeVersion == 16)
+ {
+ ScriptMessage("This is already bytecode 16.");
+ ScriptMessage("Trying to remove functions \"immersion_play_effect\", \"immersion_stop\" and \"font_replace\"!");
+
+ RemoveFunctions();
+
+ return;
+ }
+ else
+ {
+ string error = @"This game is not bytecode 13,
+ 14, 15, 16, or 17, and is not made in GameMaker 2.3
+ or greater. Please report this game to Grossley#2869
+ on Discord and provide the name of the game, where
+ you obtained it from, and additionally send the
+ data.win file of the game." + @"
+
+ Current status of game '" + game_name + @"':
+ GMS 2.3 == " + Data.GMS2_3 + @"
+ GMS 2.3.1 == " + Data.GMS2_3_1 + @"
+ GMS 2.3.2 == " + Data.GMS2_3_2 + @"
+ Bytecode == " + (Data?.GeneralInfo.BytecodeVersion);
+ ScriptError(error);
+ return;
+ }
+
+ void RemoveFunctions()
+ {
+ List funcsToRemove = new List();
+
+ foreach (UndertaleFunction func in Data.Functions)
+ {
+ if (func.ToString() == "immersion_play_effect" || func.ToString() == "immersion_stop" || func.ToString() == "font_replace")
+ funcsToRemove.Add(func);
+ }
+
+ foreach (var func in funcsToRemove)
+ Data.Functions.Remove(func);
+ }
+ }
}
\ No newline at end of file
diff --git a/AM2RPortHelperLib/utils/UTMTCli/ICSharpCode.SharpZipLib.dll b/AM2RPortHelperLib/utils/UTMTCli/ICSharpCode.SharpZipLib.dll
deleted file mode 100755
index 8a74343..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/ICSharpCode.SharpZipLib.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.Scripting.dll b/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.Scripting.dll
deleted file mode 100755
index 8218d03..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.Scripting.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.dll b/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.dll
deleted file mode 100755
index 883697c..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.CSharp.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.Scripting.dll b/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.Scripting.dll
deleted file mode 100755
index 2727d0c..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.Scripting.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.dll b/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.dll
deleted file mode 100755
index 9b51cba..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.CodeAnalysis.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.Win32.SystemEvents.dll b/AM2RPortHelperLib/utils/UTMTCli/Microsoft.Win32.SystemEvents.dll
deleted file mode 100755
index d62f333..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Microsoft.Win32.SystemEvents.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/Newtonsoft.Json.dll b/AM2RPortHelperLib/utils/UTMTCli/Newtonsoft.Json.dll
deleted file mode 100755
index 1ffeabe..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/Newtonsoft.Json.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/PropertyChanged.dll b/AM2RPortHelperLib/utils/UTMTCli/PropertyChanged.dll
deleted file mode 100755
index 571d594..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/PropertyChanged.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/System.CommandLine.dll b/AM2RPortHelperLib/utils/UTMTCli/System.CommandLine.dll
deleted file mode 100755
index 6fbcda9..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/System.CommandLine.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/System.Drawing.Common.dll b/AM2RPortHelperLib/utils/UTMTCli/System.Drawing.Common.dll
deleted file mode 100755
index 6ab3e30..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/System.Drawing.Common.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UTMTInfo.txt b/AM2RPortHelperLib/utils/UTMTCli/UTMTInfo.txt
deleted file mode 100644
index fb728b2..0000000
--- a/AM2RPortHelperLib/utils/UTMTCli/UTMTInfo.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-UTMTCLI version was taken from commit "ba31a5d16eab8b0a84899064fd97f8d0648dfdd8" (tag "v0.4.0.2")
-
-UndertaleModTool (https://github.com/krzys-h/UndertaleModTool) is licensed under GPLv3 just like this project.
\ No newline at end of file
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.deps.json b/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.deps.json
deleted file mode 100644
index a7a3079..0000000
--- a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.deps.json
+++ /dev/null
@@ -1,325 +0,0 @@
-{
- "runtimeTarget": {
- "name": ".NETCoreApp,Version=v5.0",
- "signature": ""
- },
- "compilationOptions": {},
- "targets": {
- ".NETCoreApp,Version=v5.0": {
- "UndertaleModCli/1.0.0": {
- "dependencies": {
- "Microsoft.CodeAnalysis.CSharp.Scripting": "3.9.0",
- "Newtonsoft.Json": "13.0.1",
- "System.CommandLine": "2.0.0-beta1.21308.1",
- "UndertaleModLib": "1.0.0"
- },
- "runtime": {
- "UndertaleModCli.dll": {}
- }
- },
- "Microsoft.CodeAnalysis.Analyzers/3.0.0": {},
- "Microsoft.CodeAnalysis.Common/3.9.0": {
- "dependencies": {
- "Microsoft.CodeAnalysis.Analyzers": "3.0.0",
- "System.Collections.Immutable": "5.0.0",
- "System.Memory": "4.5.4",
- "System.Reflection.Metadata": "5.0.0",
- "System.Runtime.CompilerServices.Unsafe": "5.0.0",
- "System.Text.Encoding.CodePages": "4.5.1",
- "System.Threading.Tasks.Extensions": "4.5.4"
- },
- "runtime": {
- "lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll": {
- "assemblyVersion": "3.9.0.0",
- "fileVersion": "3.900.21.12420"
- }
- }
- },
- "Microsoft.CodeAnalysis.CSharp/3.9.0": {
- "dependencies": {
- "Microsoft.CodeAnalysis.Common": "3.9.0"
- },
- "runtime": {
- "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": {
- "assemblyVersion": "3.9.0.0",
- "fileVersion": "3.900.21.12420"
- }
- }
- },
- "Microsoft.CodeAnalysis.CSharp.Scripting/3.9.0": {
- "dependencies": {
- "Microsoft.CSharp": "4.7.0",
- "Microsoft.CodeAnalysis.CSharp": "3.9.0",
- "Microsoft.CodeAnalysis.Common": "3.9.0",
- "Microsoft.CodeAnalysis.Scripting.Common": "3.9.0"
- },
- "runtime": {
- "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.Scripting.dll": {
- "assemblyVersion": "3.9.0.0",
- "fileVersion": "3.900.21.12420"
- }
- }
- },
- "Microsoft.CodeAnalysis.Scripting.Common/3.9.0": {
- "dependencies": {
- "Microsoft.CodeAnalysis.Common": "3.9.0"
- },
- "runtime": {
- "lib/netcoreapp3.1/Microsoft.CodeAnalysis.Scripting.dll": {
- "assemblyVersion": "3.9.0.0",
- "fileVersion": "3.900.21.12420"
- }
- }
- },
- "Microsoft.CSharp/4.7.0": {},
- "Microsoft.NETCore.Platforms/5.0.0": {},
- "Microsoft.Win32.SystemEvents/5.0.0": {
- "dependencies": {
- "Microsoft.NETCore.Platforms": "5.0.0"
- },
- "runtime": {
- "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": {
- "assemblyVersion": "5.0.0.0",
- "fileVersion": "5.0.20.51904"
- }
- },
- "runtimeTargets": {
- "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": {
- "rid": "win",
- "assetType": "runtime",
- "assemblyVersion": "5.0.0.0",
- "fileVersion": "5.0.20.51904"
- }
- }
- },
- "Newtonsoft.Json/13.0.1": {
- "runtime": {
- "lib/netstandard2.0/Newtonsoft.Json.dll": {
- "assemblyVersion": "13.0.0.0",
- "fileVersion": "13.0.1.25517"
- }
- }
- },
- "PropertyChanged.Fody/3.3.3": {
- "runtime": {
- "lib/netstandard2.1/PropertyChanged.dll": {
- "assemblyVersion": "3.3.3.0",
- "fileVersion": "3.3.3.0"
- }
- }
- },
- "SharpZipLib/1.3.3": {
- "runtime": {
- "lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {
- "assemblyVersion": "1.3.3.11",
- "fileVersion": "1.3.3.11"
- }
- }
- },
- "System.Collections.Immutable/5.0.0": {},
- "System.CommandLine/2.0.0-beta1.21308.1": {
- "dependencies": {
- "Microsoft.CSharp": "4.7.0",
- "System.Memory": "4.5.4"
- },
- "runtime": {
- "lib/netstandard2.0/System.CommandLine.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.0.21.30801"
- }
- }
- },
- "System.Drawing.Common/5.0.2": {
- "dependencies": {
- "Microsoft.Win32.SystemEvents": "5.0.0"
- },
- "runtime": {
- "lib/netcoreapp3.0/System.Drawing.Common.dll": {
- "assemblyVersion": "5.0.0.2",
- "fileVersion": "5.0.421.11614"
- }
- },
- "runtimeTargets": {
- "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": {
- "rid": "unix",
- "assetType": "runtime",
- "assemblyVersion": "5.0.0.2",
- "fileVersion": "5.0.421.11614"
- },
- "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": {
- "rid": "win",
- "assetType": "runtime",
- "assemblyVersion": "5.0.0.2",
- "fileVersion": "5.0.421.11614"
- }
- }
- },
- "System.Memory/4.5.4": {},
- "System.Reflection.Metadata/5.0.0": {},
- "System.Runtime.CompilerServices.Unsafe/5.0.0": {},
- "System.Text.Encoding.CodePages/4.5.1": {
- "dependencies": {
- "Microsoft.NETCore.Platforms": "5.0.0",
- "System.Runtime.CompilerServices.Unsafe": "5.0.0"
- }
- },
- "System.Threading.Tasks.Extensions/4.5.4": {},
- "UndertaleModLib/1.0.0": {
- "dependencies": {
- "Microsoft.CSharp": "4.7.0",
- "PropertyChanged.Fody": "3.3.3",
- "SharpZipLib": "1.3.3",
- "System.Drawing.Common": "5.0.2"
- },
- "runtime": {
- "UndertaleModLib.dll": {}
- }
- }
- }
- },
- "libraries": {
- "UndertaleModCli/1.0.0": {
- "type": "project",
- "serviceable": false,
- "sha512": ""
- },
- "Microsoft.CodeAnalysis.Analyzers/3.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-ojG5pGAhTPmjxRGTNvuszO3H8XPZqksDwr9xLd4Ae/JBjZZdl6GuoLk7uLMf+o7yl5wO0TAqoWcEKkEWqrZE5g==",
- "path": "microsoft.codeanalysis.analyzers/3.0.0",
- "hashPath": "microsoft.codeanalysis.analyzers.3.0.0.nupkg.sha512"
- },
- "Microsoft.CodeAnalysis.Common/3.9.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-HiWjF7PNIEngmFg2Xk8cZ/83lRIRkk9v+5ibbY5B7VvjNGdClGAMuWtZER9F5rGRR41VbJLco9ah73jFTh4vPw==",
- "path": "microsoft.codeanalysis.common/3.9.0",
- "hashPath": "microsoft.codeanalysis.common.3.9.0.nupkg.sha512"
- },
- "Microsoft.CodeAnalysis.CSharp/3.9.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-NTsiK3fnoZGemy4dBHrILwg9rL+jDnOJ7aixFu4EOWM1r6MZMrNCIhT2tO4AmIMdfICLPwj910uZRRLpbMnqHg==",
- "path": "microsoft.codeanalysis.csharp/3.9.0",
- "hashPath": "microsoft.codeanalysis.csharp.3.9.0.nupkg.sha512"
- },
- "Microsoft.CodeAnalysis.CSharp.Scripting/3.9.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-6Sb2z76TKmgHY/+RHEyb0kFuc0leZyWESd5xx/GePL4wGUHvGtJ+9XoYrWNGfyNJVMtJGEnyCtGr4mMS90fhGw==",
- "path": "microsoft.codeanalysis.csharp.scripting/3.9.0",
- "hashPath": "microsoft.codeanalysis.csharp.scripting.3.9.0.nupkg.sha512"
- },
- "Microsoft.CodeAnalysis.Scripting.Common/3.9.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-47scTiU65vHf0qYqNYpjyRKVIjULxXqkMaBWgG+UzRXvvXdI6EZtcllMQu1qAcyC8DU96muhiLn0shNYY+OnTg==",
- "path": "microsoft.codeanalysis.scripting.common/3.9.0",
- "hashPath": "microsoft.codeanalysis.scripting.common.3.9.0.nupkg.sha512"
- },
- "Microsoft.CSharp/4.7.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
- "path": "microsoft.csharp/4.7.0",
- "hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
- },
- "Microsoft.NETCore.Platforms/5.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
- "path": "microsoft.netcore.platforms/5.0.0",
- "hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
- },
- "Microsoft.Win32.SystemEvents/5.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==",
- "path": "microsoft.win32.systemevents/5.0.0",
- "hashPath": "microsoft.win32.systemevents.5.0.0.nupkg.sha512"
- },
- "Newtonsoft.Json/13.0.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
- "path": "newtonsoft.json/13.0.1",
- "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
- },
- "PropertyChanged.Fody/3.3.3": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-2dHoq3+Y37J2g06RRyV57zMY9uVOq9JanPienXxineL1pIACCgxn8dL/f6C9I0L1hPvhoipxtP2u9jcSlVsn6Q==",
- "path": "propertychanged.fody/3.3.3",
- "hashPath": "propertychanged.fody.3.3.3.nupkg.sha512"
- },
- "SharpZipLib/1.3.3": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-N8+hwhsKZm25tDJfWpBSW7EGhH/R7EMuiX+KJ4C4u+fCWVc1lJ5zg1u3S1RPPVYgTqhx/C3hxrqUpi6RwK5+Tg==",
- "path": "sharpziplib/1.3.3",
- "hashPath": "sharpziplib.1.3.3.nupkg.sha512"
- },
- "System.Collections.Immutable/5.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
- "path": "system.collections.immutable/5.0.0",
- "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
- },
- "System.CommandLine/2.0.0-beta1.21308.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-X8qLygjyktfmcNMNFekMkumyaTblJmkH3BBbKiQlk4FvJfp613gkMKrA0CNqLUT9tEfLcm3XMzAbsiYFwM8zbQ==",
- "path": "system.commandline/2.0.0-beta1.21308.1",
- "hashPath": "system.commandline.2.0.0-beta1.21308.1.nupkg.sha512"
- },
- "System.Drawing.Common/5.0.2": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-rvr/M1WPf24ljpvvrVd74+NdjRUJu1bBkspkZcnzSZnmAUQWSvanlQ0k/hVHk+cHufZbZfu7vOh/vYc0q5Uu/A==",
- "path": "system.drawing.common/5.0.2",
- "hashPath": "system.drawing.common.5.0.2.nupkg.sha512"
- },
- "System.Memory/4.5.4": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
- "path": "system.memory/4.5.4",
- "hashPath": "system.memory.4.5.4.nupkg.sha512"
- },
- "System.Reflection.Metadata/5.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==",
- "path": "system.reflection.metadata/5.0.0",
- "hashPath": "system.reflection.metadata.5.0.0.nupkg.sha512"
- },
- "System.Runtime.CompilerServices.Unsafe/5.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
- "path": "system.runtime.compilerservices.unsafe/5.0.0",
- "hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
- },
- "System.Text.Encoding.CodePages/4.5.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
- "path": "system.text.encoding.codepages/4.5.1",
- "hashPath": "system.text.encoding.codepages.4.5.1.nupkg.sha512"
- },
- "System.Threading.Tasks.Extensions/4.5.4": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "path": "system.threading.tasks.extensions/4.5.4",
- "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
- },
- "UndertaleModLib/1.0.0": {
- "type": "project",
- "serviceable": false,
- "sha512": ""
- }
- }
-}
\ No newline at end of file
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.dll b/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.dll
deleted file mode 100644
index 54efbe5..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.exe b/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.exe
deleted file mode 100755
index 1721557..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.exe and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.runtimeconfig.json b/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.runtimeconfig.json
deleted file mode 100644
index 896529d..0000000
--- a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModCli.runtimeconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "runtimeOptions": {
- "tfm": "net5.0",
- "rollForward": "LatestMajor",
- "framework": {
- "name": "Microsoft.NETCore.App",
- "version": "5.0.0"
- },
- "configProperties": {
- "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
- }
- }
-}
\ No newline at end of file
diff --git a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModLib.dll b/AM2RPortHelperLib/utils/UTMTCli/UndertaleModLib.dll
deleted file mode 100644
index 76ddb8c..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/UndertaleModLib.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll b/AM2RPortHelperLib/utils/UTMTCli/runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll
deleted file mode 100755
index 8b95164..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll b/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll
deleted file mode 100755
index b5aa0c4..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll b/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll
deleted file mode 100755
index b80b430..0000000
Binary files a/AM2RPortHelperLib/utils/UTMTCli/runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll and /dev/null differ
diff --git a/AM2RPortHelperLib/utils/bc16AndRemoveFunctions.csx b/AM2RPortHelperLib/utils/bc16AndRemoveFunctions.csx
deleted file mode 100644
index af98ebf..0000000
--- a/AM2RPortHelperLib/utils/bc16AndRemoveFunctions.csx
+++ /dev/null
@@ -1,185 +0,0 @@
-//Upgrade from bytecode 13 (experimental), 14, 15, 17 to 16 - by Grossley
-//13 and 14 do not work apparently due to variable issues that I don't know how to fix.
-//Need to test this, once I do then I can obsolete the other two scripts
-if (!((Data.GMS2_3 == false) && (Data.GMS2_3_1 == false) && (Data.GMS2_3_2 == false)))
-{
- bool x = RunUMTScript(Path.Combine(ExePath, "HelperScripts", "ConvertFrom17to16_for_2.3.csx"));
- if (x == false)
- ScriptError("ConvertFrom17to16_for_2.3.csx failed!");
- return;
-}
-
-EnsureDataLoaded();
-
-string currentBytecodeVersion = Data?.GeneralInfo.BytecodeVersion.ToString();
-string game_name = Data.GeneralInfo.Name.Content;
-
-bool is13 = false;
-
-if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
-{
- /* is13 = true;
- ScriptMessage("Bytecode 13 type game detected. The upgrading of this game is experimental.");
- currentBytecodeVersion = "13";*/
- ScriptError("Bytecode 13 is not supported.");
- return;
-}
-if (Data?.GeneralInfo.BytecodeVersion == 14)
-{
- ScriptError("Bytecode 14 is not supported.");
- return;
-}
-
-if (!((Data.GMS2_3 == false) && (Data.GMS2_3_1 == false) && (Data.GMS2_3_2 == false)))
-{
- ScriptError(game_name + "is GMS 2.3+ and is ineligible", "Ineligible");
- return;
-}
-
-if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
-{
- is13 = true;
- ScriptMessage("Bytecode 13 type game detected. The upgrading of this game is experimental.");
- currentBytecodeVersion = "13";
-}
-
-
-if ((Data?.GeneralInfo.BytecodeVersion == 14) || (Data?.GeneralInfo.BytecodeVersion == 15) || (is13 == true))
-{
- if (Data?.GeneralInfo.BytecodeVersion <= 14)
- {
- foreach (UndertaleCode code in Data.Code)
- {
- UndertaleCodeLocals locals = new UndertaleCodeLocals();
- locals.Name = code.Name;
-
- UndertaleCodeLocals.LocalVar argsLocal = new UndertaleCodeLocals.LocalVar();
- argsLocal.Name = Data.Strings.MakeString("arguments");
- argsLocal.Index = 0;
-
- locals.Locals.Add(argsLocal);
-
- code.LocalsCount = 1;
- code.GenerateLocalVarDefinitions(code.FindReferencedLocalVars(), locals); // Dunno if we actually need this line, but it seems to work?
- Data.CodeLocals.Add(locals);
- }
- }
- if (!(Data.FORM.Chunks.ContainsKey("AGRP")))
- {
- Data.FORM.Chunks["AGRP"] = new UndertaleChunkAGRP();
- var previous = -1;
- var j = 0;
- for (var i = -1; i < Data.Sounds.Count - 1; i++)
- {
- UndertaleSound sound = Data.Sounds[i + 1];
- bool flagCompressed = sound.Flags.HasFlag(UndertaleSound.AudioEntryFlags.IsCompressed);
- bool flagEmbedded = sound.Flags.HasFlag(UndertaleSound.AudioEntryFlags.IsEmbedded);
- if (i == -1)
- {
- if (!flagCompressed && !flagEmbedded)
- {
- sound.AudioID = -1;
- }
- else
- {
- sound.AudioID = 0;
- previous = 0;
- j = 1;
- }
- }
- else
- {
- if (!flagCompressed && !flagEmbedded)
- sound.AudioID = previous;
- else
- {
- sound.AudioID = j;
- previous = j;
- j++;
- }
- }
- }
- foreach (UndertaleSound sound in Data.Sounds)
- {
- if ((sound.AudioID >= 0) && (sound.AudioID < Data.EmbeddedAudio.Count))
- {
- sound.AudioFile = Data.EmbeddedAudio[sound.AudioID];
- }
- sound.GroupID = 0;
- }
- Data.GeneralInfo.Build = 1804;
- var newProductID = new byte[] { 0xBA, 0x5E, 0xBA, 0x11, 0xBA, 0xDD, 0x06, 0x60, 0xBE, 0xEF, 0xED, 0xBA, 0x0B, 0xAB, 0xBA, 0xBE };
- Data.FORM.EXTN.productIdData.Add(newProductID);
- Data.Options.Constants.Clear();
- Data.Options.Constants.Add(new UndertaleOptions.Constant() { Name = Data.Strings.MakeString("@@SleepMargin"), Value = Data.Strings.MakeString(1.ToString()) });
- Data.Options.Constants.Add(new UndertaleOptions.Constant() { Name = Data.Strings.MakeString("@@DrawColour"), Value = Data.Strings.MakeString(0xFFFFFFFF.ToString()) });
- }
- Data.FORM.Chunks["LANG"] = new UndertaleChunkLANG();
- Data.FORM.LANG.Object = new UndertaleLanguage();
- Data.FORM.Chunks["GLOB"] = new UndertaleChunkGLOB();
- String[] order = { "GEN8", "OPTN", "LANG", "EXTN", "SOND", "AGRP", "SPRT", "BGND", "PATH", "SCPT", "GLOB", "SHDR", "FONT", "TMLN", "OBJT", "ROOM", "DAFL", "TPAG", "CODE", "VARI", "FUNC", "STRG", "TXTR", "AUDO" };
- Dictionary newChunks = new Dictionary();
- foreach (String name in order)
- newChunks[name] = Data.FORM.Chunks[name];
- Data.FORM.Chunks = newChunks;
- Data.GeneralInfo.BytecodeVersion = 16;
- ScriptMessage("Upgraded from " + currentBytecodeVersion + " to 16 successfully. Save the game to apply the changes.");
- ScriptMessage("Trying to remove functions \"immersion_play_effect\", \"immersion_stop\" and \"font_replace\"!");
-
- RemoveFunctions();
-}
-else if (Data?.GeneralInfo.BytecodeVersion == 17)
-{
- if (!ScriptQuestion("Downgrade bytecode from 17 to 16?"))
- {
- ScriptMessage("Cancelled.");
- return;
- }
- Data.GeneralInfo.BytecodeVersion = 16;
- if (Data.FORM.Chunks.ContainsKey("TGIN"))
- Data.FORM.Chunks.Remove("TGIN");
- Data.GMS2_2_2_302 = false;
- ScriptMessage("Downgraded from 17 to 16 successfully. Save the game to apply the changes.");
-}
-else if (Data?.GeneralInfo.BytecodeVersion == 16)
-{
- ScriptMessage("This is already bytecode 16.");
- ScriptMessage("Trying to remove functions \"immersion_play_effect\", \"immersion_stop\" and \"font_replace\"!");
-
- RemoveFunctions();
-
- return;
-}
-else
-{
- string error = @"This game is not bytecode 13,
-14, 15, 16, or 17, and is not made in GameMaker 2.3
-or greater. Please report this game to Grossley#2869
-on Discord and provide the name of the game, where
-you obtained it from, and additionally send the
-data.win file of the game." + @"
-
-Current status of game '" + game_name + @"':
-GMS 2.3 == " + Data.GMS2_3.ToString() + @"
-GMS 2.3.1 == " + Data.GMS2_3_1.ToString() + @"
-GMS 2.3.2 == " + Data.GMS2_3_2.ToString() + @"
-Bytecode == " + (Data?.GeneralInfo.BytecodeVersion).ToString();
- ScriptError(error, "Unknown game error");
- SetUMTConsoleText(error);
- SetFinishedMessage(false);
- return;
-}
-
-void RemoveFunctions()
-{
- List funcsToRemove = new List();
-
- foreach (UndertaleFunction func in Data.Functions)
- {
- if(func.ToString() == "immersion_play_effect" || func.ToString() == "immersion_stop" || func.ToString() == "font_replace")
- funcsToRemove.Add(func);
- }
-
- foreach(var func in funcsToRemove)
- Data.Functions.Remove(func);
-}