private static int Main(string[] _args) { Trace.Write("------------ {1} {0} --------------", Assembly.GetExecutingAssembly().GetName().Version.ToString(), Assembly.GetExecutingAssembly().GetName().Name); /*if (!Debugger.IsAttached) * { * AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; * }*/ //Unlike yoyogames. i see NO issue with running a debugger here :D Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); GMLCompile.Test(); GMLCompile.Code_Init(); HTMLRunner = "C:\\source\\GameMaker\\Runner\\HTML5\\scripts"; Verbose = false; CompileVerbose = false; Out = Console.Out; SplashOmit = true; TextureType = new eTexType[2]; SeparateOpaqueAndAlpha = false; DisplaySortedTextures = false; RemoveDND = true; CenterHTML5Game = false; NoCache = false; HTMLRunner = string.Empty; NoIndexHTML = false; TextureGroups = new Dictionary <string, List <string> >(); DoObfuscate = false; ObfuscateObfuscate = true; ObfuscatePrettyPrint = false; ObfuscateRemoveUnused = true; ObfuscateEncodeStrings = true; LoadingBarName = null; CustomLoadingScreen = false; ExitCode = 0; InhibitErrorOutput = false; string PreObfuscateLib = string.Empty; TextureScale = 1; Studio = false; m_options = new OptionSet().Add("?|help", "display help usage", (Action <string>) delegate { ShowHelp(); }).Add("m=|machine=", "set machine type (ios, psp, win, droid)", delegate(string m) { SetMachineType(m); }).Add("t=|tex=", "override opaque texture type (dxt,raw,pvr,png)", delegate(string s) { TextureType[0] = SetTextureType(s); }) .Add("at=|alphatex=", "override alpha texture type (dxt,raw,pvr,png)", delegate(string s) { TextureType[1] = SetTextureType(s); }) .Add("o=|outputDir=", "set output directory", delegate(string d) { OutputDir = d; }) .Add("w=|tpageWidth=", "set texture page width", delegate(int w) { TexturePageWidth = w; }) .Add("h=|tpageHeight=", "set texture page height", delegate(int h) { TexturePageHeight = h; }) .Add("wt|writeTextures", "optionally write textures generated to output directory", (Action <string>) delegate { WriteTextures = true; }) .Add("ww|writeWaves", "optionally write audio waves generated to output directory", (Action <string>) delegate { WriteTextures = true; }) .Add("so|splashOmit", "optionally disable writing of the Spash screen to output file", (Action <string>) delegate { SplashOmit = true; }) .Add("dst|DisplaySortedTextures", "optionally display sorted texture information", (Action <string>) delegate { DisplaySortedTextures = true; }) .Add("c|compile", "do not display gui compile only", (Action <string>) delegate { CompileOnly = true; }) .Add("s|separate", "separate the alpha and opaque textures (false by default)", (Action <string>) delegate { SeparateOpaqueAndAlpha = true; }) .Add("v|verbose", "output verbose debug info", (Action <string>) delegate { Verbose = true; }) .Add("nohtml", "do not output index.html", (Action <string>) delegate { NoIndexHTML = true; }) .Add("HTMLRunner=", "directory with HTML Runner (will be copied as scripts)", delegate(string d) { HTMLRunner = d; }) .Add("tg=|TextureGroup=", "Group resources onto texture pages comma param is a filename, file has format <groupname> : <comma delim list of resourcenames>, use # for comment (NOTE: entries MUST all be on the same line", delegate(string f) { string[] array4 = File.ReadAllLines(f); string[] array5 = array4; foreach (string text3 in array5) { string text4 = text3.Trim().Replace(" ", "").Replace("\t", ""); if (!string.IsNullOrEmpty(text4) && !text4.StartsWith("#")) { string[] array6 = text4.Split(':'); if (array6.Length == 2) { string[] collection2 = array6[1].Split(','); string key = array6[0]; List <string> value = new List <string>(collection2); TextureGroups.Add(key, value); } } } }) .Add("to=|TextureOption=", "Set an option for a set of textures via <option> : <comma delimited list of resourcenames>. Valid options are: " + TextureOptions.ValidTextureOptions() + ")", delegate(string f) { string[] array = File.ReadAllLines(f); string[] array2 = array; foreach (string text in array2) { string text2 = text.Trim().Replace(" ", "").Replace("\t", ""); if (!string.IsNullOrEmpty(text2) && !text2.StartsWith("#")) { string[] array3 = text2.Split(':'); if (array3.Length == 2) { string[] collection = array3[1].Split(','); string optionName = array3[0]; List <string> resources = new List <string>(collection); TextureOptions.AddResourceOptions(optionName, resources); } } } }) .Add("nodnd", "remove any Drag and Drop (dnd)", (Action <string>) delegate { RemoveDND = true; }) .Add("obfuscate|ob", "obfuscate the Javascript output", (Action <string>) delegate { DoObfuscate = true; }) .Add("obfuscateDo=|obob=", "Really do the obfuscation (default true)", delegate(bool v) { ObfuscateObfuscate = v; }) .Add("obfuscatePrettyPrint=|obpp=", "when obfuscating Pretty Print the output (default false)", delegate(bool v) { ObfuscatePrettyPrint = v; }) .Add("obfuscateRemoveUnused=|obru=", "when obfuscating Remove Unused functions from the output (default true)", delegate(bool v) { ObfuscateRemoveUnused = v; }) .Add("obfuscateEncodeStrings=|obes=", "when obfuscating Encode strings in the output (default true)", delegate(bool v) { ObfuscateEncodeStrings = v; }) .Add("compileVerbose|cv", "switch on verbose mode when compiling the GML (default false)", (Action <string>) delegate { CompileVerbose = true; }) .Add("c_html5", "Center the HTML5 game in the browser", (Action <string>) delegate { CenterHTML5Game = true; }) .Add("nocache_html5", "Add the \"no cache\" option to the default index.html page", (Action <string>) delegate { NoCache = true; }) .Add("preObfuscateLib=|pob=", "Pre-Obfuscate a directory of JS files into a single file - keep GM public interface", delegate(string v) { PreObfuscateLib = v; }) .Add("textureScale=|ts=", "scale textures by an integer amount (default 1)", delegate(int v) { TextureScale = v; }) .Add("loadingbarcallback=", "Name of the loading bar callback function", delegate(string v) { LoadingBarName = v; }) .Add("customloadingimage", "Use the custom screen provided?", (Action <string>) delegate { CustomLoadingScreen = true; }) .Add("studio", "Enable Studio use...", (Action <string>) delegate { Studio = true; }); List <string> list = m_options.Parse(_args); if (!string.IsNullOrEmpty(PreObfuscateLib)) { DoPreObfuscateLib(PreObfuscateLib, OutputDir); return(ExitCode); } GMAssets gMAssets = null; foreach (string item in list) { if (File.Exists(item)) { gMAssets = Loader.Load(item); } } if (MachineType == null) { SetMachineType("ios"); } if (gMAssets == null) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Exe files (*.exe, *.ios, *.psp, *.win, *.droid)|*.exe;*.ios;*.psp;*.win;*.droid|All files (*.*)|*.*"; openFileDialog.FilterIndex = 1; openFileDialog.RestoreDirectory = true; if (openFileDialog.ShowDialog() != DialogResult.OK) { return(-1); } gMAssets = Loader.Load(openFileDialog.FileName); } if (OutputDir == null) { if (gMAssets != null) { OutputDir = Path.GetDirectoryName(gMAssets.FileName); } } Assets = gMAssets; if (!CompileOnly) { Application.Run(new Form1(gMAssets)); } else { string extension = MachineType.Extension; if (Studio) { extension = ".zip"; } string name = Path.Combine(OutputDir, Path.ChangeExtension(Path.GetFileName(gMAssets.FileName), extension)); switch (MachineType.OutputType) { case eOutputType.eWAD: IFFSaver.Save(gMAssets, name); break; case eOutputType.eHTML5: HTML5Saver.Save(gMAssets, name); break; } } return(ExitCode); }
private static void DoPreObfuscateLib(string _sourceDir, string _outputDir) { List <string> files = new List <string>(); HTML5Saver.GetFiles(_sourceDir, new string[3] { ".svn", "runner.js", "particles" }, files); List <string> list = new List <string>(); foreach (KeyValuePair <string, GMLFunction> ms_func in GMLCompile.ms_funcs) { list.Add(ms_func.Key); } foreach (KeyValuePair <string, GMLVariable> ms_builtin in GMLCompile.ms_builtins) { list.Add(ms_builtin.Key); if (!string.IsNullOrEmpty(ms_builtin.Value.setFunction)) { list.Add(ms_builtin.Value.setFunction); } if (!string.IsNullOrEmpty(ms_builtin.Value.getFunction)) { list.Add(ms_builtin.Value.getFunction); } } foreach (KeyValuePair <string, GMLVariable> item2 in GMLCompile.ms_builtinsArray) { list.Add(item2.Key); if (!string.IsNullOrEmpty(item2.Value.setFunction)) { list.Add(item2.Value.setFunction); } if (!string.IsNullOrEmpty(item2.Value.getFunction)) { list.Add(item2.Value.getFunction); } } foreach (KeyValuePair <string, GMLVariable> item3 in GMLCompile.ms_builtinsLocal) { list.Add(item3.Key); if (!string.IsNullOrEmpty(item3.Value.setFunction)) { list.Add(item3.Value.setFunction); } if (!string.IsNullOrEmpty(item3.Value.getFunction)) { list.Add(item3.Value.getFunction); } } foreach (KeyValuePair <string, GMLVariable> item4 in GMLCompile.ms_builtinsLocalArray) { list.Add(item4.Key); if (!string.IsNullOrEmpty(item4.Value.setFunction)) { list.Add(item4.Value.setFunction); } if (!string.IsNullOrEmpty(item4.Value.getFunction)) { list.Add(item4.Value.getFunction); } } foreach (KeyValuePair <string, double> ms_constant in GMLCompile.ms_constants) { list.Add(ms_constant.Key); } string[] array = new string[] { "antialias", "charset", "i", "c", "JSON_game", "Options", "debugMode", "loadingBarCallback", "gameId", "gameGuid", "fullScreen", "interpolatePixels", "showCursor", "scale", "allowFullScreenKey", "freezeOnLostFocus", "showLoadingBar", "displayErrors", "writeErrors", "abortErrors", "variableErrors", "Textures", "Triggers", "pName", "moment", "pFunc", "Extensions", "TriggerEvents", "jsFiles", "init", "final", "Sounds", "pName", "kind", "extension", "origName", "effects", "volume", "pan", "preload", "Sprites", "width", "height", "bboxMode", "transparent", "smooth", "preload", "colCheck", "xOrigin", "yOrigin", "bboxLeft", "bboxRight", "bboxTop", "bboxBottom", "TPEntryIndex", "Masks", "Backgrounds", "Paths", "kind", "closed", "precision", "points", "speed", "Fonts", "size", "bold", "italic", "first", "last", "TPageEntry", "scaleX", "scaleY", "glyphs", "w", "h", "shift", "offset", "Timelines", "Events", "Time", "Event", "GMObjects", "spriteIndex", "visible", "solid", "persistent", "depth", "parent", "spritemask", "CollisionEvents", "CreateEvent", "DestroyEvent", "StepBeginEvent", "StepNormalEvent", "StepEndEvent", "DrawEvent", "NoButtonPressed", "LeftButtonDown", "RightButtonDown", "MiddleButtonDown", "LeftButtonPressed", "RightButtonPressed", "MiddleButtonPressed", "LeftButtonReleased", "RightButtonReleased", "MiddleButtonReleased", "GlobalLeftButtonDown", "GlobalRightButtonDown", "GlobalMiddleButtonDown", "GlobalLeftButtonPressed", "GlobalRightButtonPressed", "GlobalMiddleButtonPressed", "GlobalLeftButtonReleased", "GlobalRightButtonReleased", "GlobalMiddleButtonReleased", "MouseEnter", "MouseLeave", "OutsideEvent", "BoundaryEvent", "StartGameEvent", "EndGameEvent", "StartRoomEvent", "EndRoomEvent", "NoLivesEvent", "AnimationEndEvent", "EndOfPathEvent", "NoHealthEvent", "CloseButtonEvent", "OutsideView0Event", "BoundaryView0Event", "UserEvent0", "UserEvent1", "UserEvent2", "UserEvent3", "UserEvent4", "UserEvent5", "UserEvent6", "UserEvent7", "UserEvent8", "UserEvent9", "UserEvent10", "UserEvent11", "UserEvent12", "UserEvent13", "UserEvent14", "UserEvent15", "WebImageLoadedEvent", "WebSoundLoadedEvent", "WebAsyncEvent", "ObjAlarm0", "ObjAlarm1", "ObjAlarm2", "ObjAlarm3", "ObjAlarm4", "ObjAlarm5", "ObjAlarm6", "ObjAlarm7", "ObjAlarm8", "ObjAlarm9", "ObjAlarm10", "ObjAlarm11", "KeyPressed_", "KeyPressed_NOKEY", "KeyPressed_ANYKEY", "KeyPressed_BACKSPACE", "KeyPressed_TAB", "KeyPressed_ENTER", "KeyPressed_SHIFT", "KeyPressed_CTRL", "KeyPressed_ALT", "KeyPressed_PAUSE", "KeyPressed_ESCAPE", "KeyPressed_SPACE", "KeyPressed_PAGEUP", "KeyPressed_PAGEDOWN", "KeyPressed_END", "KeyPressed_HOME", "KeyPressed_LEFT", "KeyPressed_UP", "KeyPressed_RIGHT", "KeyPressed_DOWN", "KeyPressed_INSERT", "KeyPressed_DELETE", "KeyPressed_0", "KeyPressed_1", "KeyPressed_2", "KeyPressed_3", "KeyPressed_4", "KeyPressed_5", "KeyPressed_6", "KeyPressed_7", "KeyPressed_8", "KeyPressed_9", "KeyPressed_A", "KeyPressed_B", "KeyPressed_C", "KeyPressed_D", "KeyPressed_E", "KeyPressed_F", "KeyPressed_G", "KeyPressed_H", "KeyPressed_I", "KeyPressed_J", "KeyPressed_K", "KeyPressed_L", "KeyPressed_M", "KeyPressed_N", "KeyPressed_O", "KeyPressed_P", "KeyPressed_Q", "KeyPressed_R", "KeyPressed_S", "KeyPressed_T", "KeyPressed_U", "KeyPressed_V", "KeyPressed_W", "KeyPressed_X", "KeyPressed_Y", "KeyPressed_Z", "KeyPressed_F1", "KeyPressed_F2", "KeyPressed_F3", "KeyPressed_F4", "KeyPressed_F5", "KeyPressed_F6", "KeyPressed_F7", "KeyPressed_F8", "KeyPressed_F9", "KeyPressed_F10", "KeyPressed_F11", "KeyPressed_F12", "KeyPressed_NUM_LOCK", "KeyPressed_NUM_0", "KeyPressed_NUM_1", "KeyPressed_NUM_2", "KeyPressed_NUM_3", "KeyPressed_NUM_4", "KeyPressed_NUM_5", "KeyPressed_NUM_6", "KeyPressed_NUM_7", "KeyPressed_NUM_8", "KeyPressed_NUM_9", "KeyPressed_NUM_STAR", "KeyPressed_NUM_PLUS", "KeyPressed_NUM_MINUS", "KeyPressed_NUM_DOT", "KeyPressed_NUM_DIV", "Key_NOKEY", "Key_ANYKEY", "Key_BACKSPACE", "Key_TAB", "Key_ENTER", "Key_SHIFT", "Key_CTRL", "Key_ALT", "Key_PAUSE", "Key_ESCAPE", "Key_SPACE", "Key_PAGEUP", "Key_PAGEDOWN", "Key_END", "Key_HOME", "Key_LEFT", "Key_UP", "Key_RIGHT", "Key_DOWN", "Key_INSERT", "Key_DELETE", "Key_0", "Key_1", "Key_2", "Key_3", "Key_4", "Key_5", "Key_6", "Key_7", "Key_8", "Key_9", "Key_A", "Key_B", "Key_C", "Key_D", "Key_E", "Key_F", "Key_G", "Key_H", "Key_I", "Key_J", "Key_K", "Key_L", "Key_M", "Key_N", "Key_O", "Key_P", "Key_Q", "Key_R", "Key_S", "Key_T", "Key_U", "Key_V", "Key_W", "Key_X", "Key_Y", "Key_Z", "Key_F1", "Key_F2", "Key_F3", "Key_F4", "Key_F5", "Key_F6", "Key_F7", "Key_F8", "Key_F9", "Key_F10", "Key_F11", "Key_F12", "Key_NUM_LOCK", "Key_NUM_0", "Key_NUM_1", "Key_NUM_2", "Key_NUM_3", "Key_NUM_4", "Key_NUM_5", "Key_NUM_6", "Key_NUM_7", "Key_NUM_8", "Key_NUM_9", "Key_NUM_STAR", "Key_NUM_PLUS", "Key_NUM_MINUS", "Key_NUM_DOT", "Key_NUM_DIV", "KeyReleased_NOKEY", "KeyReleased_ANYKEY", "KeyReleased_BACKSPACE", "KeyReleased_TAB", "KeyReleased_ENTER", "KeyReleased_SHIFT", "KeyReleased_CTRL", "KeyReleased_ALT", "KeyReleased_PAUSE", "KeyReleased_ESCAPE", "KeyReleased_SPACE", "KeyReleased_PAGEUP", "KeyReleased_PAGEDOWN", "KeyReleased_END", "KeyReleased_HOME", "KeyReleased_LEFT", "KeyReleased_UP", "KeyReleased_RIGHT", "KeyReleased_DOWN", "KeyReleased_INSERT", "KeyReleased_DELETE", "KeyReleased_0", "KeyReleased_1", "KeyReleased_2", "KeyReleased_3", "KeyReleased_4", "KeyReleased_5", "KeyReleased_6", "KeyReleased_7", "KeyReleased_8", "KeyReleased_9", "KeyReleased_A", "KeyReleased_B", "KeyReleased_C", "KeyReleased_D", "KeyReleased_E", "KeyReleased_F", "KeyReleased_G", "KeyReleased_H", "KeyReleased_I", "KeyReleased_J", "KeyReleased_K", "KeyReleased_L", "KeyReleased_M", "KeyReleased_N", "KeyReleased_O", "KeyReleased_P", "KeyReleased_Q", "KeyReleased_R", "KeyReleased_S", "KeyReleased_T", "KeyReleased_U", "KeyReleased_V", "KeyReleased_W", "KeyReleased_X", "KeyReleased_Y", "KeyReleased_Z", "KeyReleased_F1", "KeyReleased_F2", "KeyReleased_F3", "KeyReleased_F4", "KeyReleased_F5", "KeyReleased_F6", "KeyReleased_F7", "KeyReleased_F8", "KeyReleased_F9", "KeyReleased_F10", "KeyReleased_F11", "KeyReleased_F12", "KeyReleased_NUM_LOCK", "KeyReleased_NUM_0", "KeyReleased_NUM_1", "KeyReleased_NUM_2", "KeyReleased_NUM_3", "KeyReleased_NUM_4", "KeyReleased_NUM_5", "KeyReleased_NUM_6", "KeyReleased_NUM_7", "KeyReleased_NUM_8", "KeyReleased_NUM_9", "KeyReleased_NUM_STAR", "KeyReleased_NUM_PLUS", "KeyReleased_NUM_MINUS", "KeyReleased_NUM_DOT", "KeyReleased_NUM_DIV", "GMRooms", "pCaption", "width", "height", "speed", "persistent", "colour", "showColour", "enableViews", "viewClearScreen", "pCode", "visible", "foreground", "index", "htiled", "vtiled", "hspeed", "vspeed", "stretch", "backgrounds", "views", "visible", "xview", "yview", "wview", "hview", "xport", "yport", "wport", "hport", "hborder", "vborder", "hspeed", "vspeed", "index", "pInstances", "id", "tiles", "xo", "yo", "depth", "RoomOrder", "TPageEntries", "XOffset", "YOffset", "CropWidth", "CropHeight", "ow", "oh", "tp", "fontname", "array_set_2D", "array_set_1D", "array_get_2D", "array_get_1D", "g_pBuiltIn", "GetWithArray", "yyInst", "Scripts", "WebGL", "CreateEventOrder" }; string[] array2 = array; foreach (string item in array2) { list.Add(item); } string outputfilename = Path.Combine(_outputDir, "gmRunner.js"); Out.WriteLine("Obfuscating..."); YYObfuscate yYObfuscate = new YYObfuscate(); yYObfuscate.Obfuscate = ObfuscateObfuscate; yYObfuscate.Verbose = Verbose; yYObfuscate.PrettyPrint = ObfuscatePrettyPrint; yYObfuscate.RemovedUnused = ObfuscateRemoveUnused; yYObfuscate.EncodeStrings = ObfuscateEncodeStrings; yYObfuscate.DoObfuscate(files, outputfilename, list); }