diff --git a/ExportToProject.csx b/ExportToProject.csx index 949f997..504fdbb 100644 --- a/ExportToProject.csx +++ b/ExportToProject.csx @@ -6,6 +6,7 @@ using System.Threading.Tasks; using System.Xml; using System.Xml.Linq; using System.Drawing; +using System.Reflection; using UndertaleModLib.Models; using UndertaleModLib.Util; using UndertaleModLib.Decompiler; @@ -85,7 +86,7 @@ void ExportSprite(UndertaleSprite sprite) // Save the sprite GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("sprite", + new XElement("sprite", new XElement("type", "0"), new XElement("xorig", sprite.OriginX.ToString()), new XElement("yorigin", sprite.OriginY.ToString()), @@ -99,7 +100,7 @@ void ExportSprite(UndertaleSprite sprite) new XElement("bbox_bottom", sprite.MarginBottom.ToString()), new XElement("HTile", "0"), new XElement("VTile", "0"), - new XElement("TextureGroups", + new XElement("TextureGroups", new XElement("TextureGroup0", "0") ), new XElement("For3D", "0"), @@ -155,7 +156,7 @@ void ExportBackground(UndertaleBackground background) // Save the backgound GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("background", + new XElement("background", new XElement("istileset", "-1"), new XElement("tilewidth", background.Texture.BoundingWidth.ToString()), new XElement("tileheight", background.Texture.BoundingHeight.ToString()), @@ -165,7 +166,7 @@ void ExportBackground(UndertaleBackground background) new XElement("tilevsep", "0"), new XElement("HTile", "-1"), new XElement("VTile", "-1"), - new XElement("TextureGroups", + new XElement("TextureGroups", new XElement("TextureGroup0", "0") ), new XElement("For3D", "0"), @@ -176,7 +177,7 @@ void ExportBackground(UndertaleBackground background) ); File.WriteAllText(projFolder + "/background/" + background.Name.Content + ".background.gmx", gmx.ToString()); - + // Save background images worker.ExportAsPNG(background.Texture, projFolder + "/background/images/" + background.Name.Content + ".png"); } @@ -191,7 +192,7 @@ void ExportGameObject(UndertaleGameObject gameObject) // Save the object GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("object", + new XElement("object", new XElement("spriteName", gameObject.Sprite is null ? "" : gameObject.Sprite.Name.Content), new XElement("solid", BoolToString(gameObject.Solid)), new XElement("visible", BoolToString(gameObject.Visible)), @@ -250,9 +251,9 @@ void ExportGameObject(UndertaleGameObject gameObject) new XElement("relative", BoolToString(k.Relative)), new XElement("isnot", BoolToString(k.IsNot)), new XElement("arguments", - new XElement("argument", + new XElement("argument", new XElement("kind", "1"), - new XElement("string", k.CodeId != null ? Decompiler.Decompile(k.CodeId, DECOMPILE_CONTEXT.Value) : "") + new XElement("string", k.CodeId != null ? Decompiler.Decompile(k.CodeId, DECOMPILE_CONTEXT.Value) : "") ) ) ); @@ -279,7 +280,7 @@ void ExportRoom(UndertaleRoom room) // Save the room GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("room", + new XElement("room", new XElement("caption", room.Caption.Content), new XElement("width", room.Width.ToString()), new XElement("height", room.Height.ToString()), @@ -400,7 +401,7 @@ void ExportSound(UndertaleSound sound) // Save the sound GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("sound", + new XElement("sound", new XElement("kind", Path.GetExtension(sound.File.Content) == ".ogg" ? "3" : "0"), new XElement("extension", Path.GetExtension(sound.File.Content)), new XElement("origname", "sound\\audio\\" + sound.File.Content), @@ -408,13 +409,13 @@ void ExportSound(UndertaleSound sound) new XElement("volume", sound.Volume.ToString()), new XElement("pan", "0"), new XElement("bitRates", "192"), - new XElement("sampleRates", + new XElement("sampleRates", new XElement("sampleRate", "44100") ), - new XElement("types", + new XElement("types", new XElement("type", "1") ), - new XElement("bitDepths", + new XElement("bitDepths", new XElement("bitDepth", "16") ), new XElement("preload", "-1"), @@ -456,7 +457,7 @@ void ExportFont(UndertaleFont font) // Save the font GMX var gmx = new XDocument( new XComment(gmxDeclaration), - new XElement("font", + new XElement("font", new XElement("name", font.Name.Content), new XElement("size", font.EmSize.ToString()), new XElement("bold", BoolToString(font.Bold)), @@ -466,10 +467,10 @@ void ExportFont(UndertaleFont font) new XElement("aa", font.AntiAliasing.ToString()), new XElement("includeTTF", "0"), new XElement("TTFName", ""), - new XElement("texgroups", + new XElement("texgroups", new XElement("texgroup", "0") ), - new XElement("ranges", + new XElement("ranges", new XElement("range0", font.RangeStart.ToString() + "," + font.RangeEnd.ToString()) ), new XElement("glyphs"), @@ -507,25 +508,25 @@ void ExportProjectFile() new XElement("assets") ); - WriteIndexes("sounds", "sound", Data.Sounds, "sound", "sound\\" + i.Name.Content, gmx.Element("assets")); - WriteIndexes("sprites", "sprites", Data.Sprites, "sprite", "sprites\\" + i.Name.Content, gmx.Element("assets")); - WriteIndexes("backgrounds", "background", Data.Backgrounds, "background", "background\\" + i.Name.Content, gmx.Element("assets")); - WriteIndexes("scripts", "scripts", Data.Scripts, "script", "scripts\\" + i.Name.Content + ".gml", gmx.Element("assets")); - WriteIndexes("fonts", "fonts", Data.Fonts, "font", "fonts\\" + i.Name.Content, gmx.Element("assets")); - WriteIndexes("objects", "objects", Data.GameObjects, "object", "objects\\" + i.Name.Content, gmx.Element("assets")); - WriteIndexes("rooms", "rooms", Data.Rooms, "room", "rooms\\" + i.Name.Content, gmx.Element("assets")); + WriteIndexes(gmx.Element("assets"), "sounds", "sound", Data.Sounds, "sound", "sound\\"); + WriteIndexes(gmx.Element("assets"), "sprites", "sprites", Data.Sprites, "sprite", "sprites\\"); + WriteIndexes(gmx.Element("assets"), "backgrounds", "background", Data.Backgrounds, "background", "background\\"); + WriteIndexes(gmx.Element("assets"), "scripts", "scripts", Data.Scripts, "script", "scripts\\", ".gml"); + WriteIndexes(gmx.Element("assets"), "fonts", "fonts", Data.Fonts, "font", "fonts\\"); + WriteIndexes(gmx.Element("assets"), "objects", "objects", Data.GameObjects, "object", "objects\\"); + WriteIndexes(gmx.Element("assets"), "rooms", "rooms", Data.Rooms, "room", "rooms\\"); File.WriteAllText(projFolder + "Export_Project.project.gmx", gmx.ToString()); } -void WriteIndexes(string elementName, string attributeName, List dataList, string oneName, string fileName, XElement rootNode) +void WriteIndexes(XElement rootNode, string elementName, string attributeName, IList dataList, string oneName, string resourcePath, string fileExtension = "") { - var datasNode = new XElement( - new XAttribute(elementName, attributeName) + var datasNode = new XElement(elementName, + new XAttribute("name", attributeName) ); - foreach (var i in dataList) + foreach (UndertaleNamedResource i in dataList) { - var dataNode = new XElement(oneName, fileName); + var dataNode = new XElement(oneName, resourcePath + i.Name.Content + fileExtension); datasNode.Add(dataNode); } rootNode.Add(datasNode);