/// <summary> /// Generic Subscreen handler. /// </summary> public static void TitleHandler() { var host = NoxicoGame.HostForm; if (Subscreens.FirstDraw) { Subscreens.FirstDraw = false; host.Clear(); var xScale = Program.Cols / 80f; var yScale = Program.Rows / 25f; var background = new Bitmap(Program.Cols, Program.Rows * 2, System.Drawing.Imaging.PixelFormat.Format24bppRgb); var logo = Mix.GetBitmap("logo.png"); var titleOptions = Mix.GetFilesWithPattern("titles\\*.png"); var chosen = Mix.GetBitmap(titleOptions.PickOne()); //Given our random backdrop and fixed logo, draw them both onto background //because we can't -just- display alpha-blended PNGs. using (var gfx = Graphics.FromImage(background)) { gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gfx.Clear(Color.Black); gfx.DrawImage(chosen, 0, 0, Program.Cols, Program.Rows * 2); gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; gfx.DrawImage(logo, 0, 0, logo.Width * xScale, logo.Height * yScale); } UIManager.Initialize(); titleBack = new UIPNGBackground(background); var subtitleLeft = (int)(10 * xScale); var subtitleTop = (int)((logo.Height * yScale) / 2) + 1; var subtitle = i18n.GetString("ts_subtitle"); var pressEnter = "\xC4\xC4\xC4\xC4\xB4 " + i18n.GetString("ts_pressentertobegin") + " <cGray>\xC3\xC4\xC4\xC4\xC4"; titleCaption = new UILabel(subtitle) { Top = subtitleTop, Left = subtitleLeft + 2, Foreground = Color.Teal, Darken = true }; titlePressEnter = new UILabel(pressEnter) { Top = subtitleTop + 2, Left = subtitleLeft, Foreground = Color.Gray, Darken = true }; UIManager.Elements.Add(titleBack); UIManager.Elements.Add(titleCaption); UIManager.Elements.Add(titlePressEnter); //UIManager.Elements.Add(new UILabel("\u015c") { Top = 6, Left = 50, Foreground = Color.Gray }); UIManager.Draw(); Options.FromTitle = true; } if (NoxicoGame.IsKeyDown(KeyBinding.Accept) || Subscreens.Mouse || Vista.Triggers != 0) { if (Subscreens.Mouse) { Subscreens.UsingMouse = true; } Subscreens.Mouse = false; Subscreens.FirstDraw = true; var rawSaves = Directory.GetDirectories(NoxicoGame.SavePath); var saves = new List <string>(); //Check each possible save's version. foreach (var s in rawSaves) { var verCheck = Path.Combine(s, "version"); if (!File.Exists(verCheck)) { continue; } var version = int.Parse(File.ReadAllText(verCheck)); if (version < 20) { continue; } if (File.Exists(Path.Combine(s, "global.bin"))) { saves.Add(s); } } NoxicoGame.ClearKeys(); Subscreens.Mouse = false; //Linq up a set of options for each save game. This returns the game's names as the keys. var options = saves.ToDictionary(new Func <string, object>(s => Path.GetFileName(s)), new Func <string, string>(s => { string p; var playerFile = Path.Combine(s, "player.bin"); if (File.Exists(playerFile)) { using (var f = new BinaryReader(File.OpenRead(playerFile))) { p = Player.LoadFromFile(f).Character.Name.ToString(true); } return(i18n.Format("ts_loadgame", p, Path.GetFileName(s))); } return(i18n.Format("ts_startoverinx", Path.GetFileName(s))); })); options.Add("~", i18n.GetString("ts_startnewgame")); options.Add("~~", i18n.GetString("ts_testingarena")); options.Add("~~~", i18n.GetString("ts_options")); //Display our list of saves. MessageBox.List(saves.Count == 0 ? i18n.GetString("ts_welcometonoxico") : i18n.GetString(saves.Count == 1 ? "ts_thereisasave" : "ts_therearesaves"), options, () => { if ((string)MessageBox.Answer == "~") { //Restore our title screen backdrop, since the MessageBox subscreen purged it. UIManager.Elements.Add(titleBack); UIManager.Elements.Add(titleCaption); UIManager.Elements.Add(titlePressEnter); UIManager.Draw(); MessageBox.Input("What name would you like for your new world?", NoxicoGame.RollWorldName(), () => { NoxicoGame.WorldName = (string)MessageBox.Answer; NoxicoGame.Mode = UserMode.Subscreen; NoxicoGame.Subscreen = Introduction.CharacterCreator; NoxicoGame.Immediate = true; } ); } else if ((string)MessageBox.Answer == "~~") { NoxicoGame.WorldName = "<Testing Arena>"; var env = Lua.Environment; Lua.RunFile("testarena.lua"); var testBoard = new Board(env.TestArena.ArenaWidth, env.TestArena.ArenaHeight); var me = NoxicoGame.Me; me.Boards.Add(testBoard); me.CurrentBoard = testBoard; me.CreatePlayerCharacter(env.TestArena.Name, env.TestArena.BioGender, env.TestArena.IdentifyAs, env.TestArena.Preference, env.TestArena.Bodyplan, new Dictionary <string, string>(), env.TestArena.BonusTrait); env.BuildTestArena(testBoard); me.Player.ParentBoard = testBoard; testBoard.EntitiesToAdd.Add(me.Player); NoxicoGame.InGameTime = new DateTime(740 + Random.Next(0, 20), 6, 26, 12, 0, 0); testBoard.UpdateLightmap(null, true); testBoard.AimCamera(); testBoard.Redraw(); testBoard.Draw(); Options.FromTitle = false; Subscreens.FirstDraw = true; NoxicoGame.Immediate = true; NoxicoGame.AddMessage(i18n.GetString("welcometest"), Color.Yellow); NoxicoGame.AddMessage(i18n.GetString("rememberhelp")); NoxicoGame.Mode = UserMode.Walkabout; } else if ((string)MessageBox.Answer == "~~~") { Options.FromTitle = true; //Restore our title screen backdrop, since the MessageBox subscreen purged it. UIManager.Initialize(); UIManager.Elements.Add(titleBack); UIManager.Elements.Add(titleCaption); UIManager.Elements.Add(titlePressEnter); Options.Open(); } else { Options.FromTitle = false; NoxicoGame.WorldName = (string)MessageBox.Answer; host.Noxico.LoadGame(); NoxicoGame.Me.CurrentBoard.Draw(); Subscreens.FirstDraw = true; NoxicoGame.Immediate = true; NoxicoGame.AddMessage(i18n.GetString("welcomeback"), Color.Yellow); NoxicoGame.AddMessage(i18n.GetString("rememberhelp")); //TextScroller.LookAt(NoxicoGame.Me.Player); NoxicoGame.Mode = UserMode.Walkabout; } } ); } }